home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / mpl17ds.zip / CONFIG.BAS < prev    next >
BASIC Source File  |  1989-06-14  |  154KB  |  4,170 lines

  1.       ' $linesize: 132
  2.       ' $title:  'CONFIG CPC17-2A, Copyright 1983-89 by D. Thomas Mack'
  3.       ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINE 10000-10230
  4. 10000 ' CONFIG.BAS (RBBS-PC VERSION CPC17-2A)
  5.       ' by D.Thomas Mack
  6.       '   The Second Ring
  7.       '   39 Cranbury Dr.
  8.       '   Trumbull, CT. 06611
  9.       '
  10.       ' *******************************NOTICE**********************************
  11.       ' *  A limited license is granted to all users of this program and it's *
  12.       ' *  companion program, RBBS-PC (ver. CPC17-2A), to make copies of this *
  13.       ' *  program and distribute the copies to other users, on the following *
  14.       ' *  conditions                                                         *
  15.       ' *   1.   The copyright notices contained within this program are not  *
  16.       ' *        altered, bypassed, or removed.                               *
  17.       ' *   2.   The program is not to be disrtibuted to others in modified   *
  18.       ' *        form (i.e. the line numbers must remain the same).           *
  19.       ' *   3.   No fee is charged (or any other consideration received)      *
  20.       ' *        for coping or distributing these programs without an express *
  21.       ' *        written agreement with D. Thomas Mack, The Second Ring,      *
  22.       ' *        39 Cranbury Dr., Trumbul, CT. 06611                          *
  23.       ' *                                                                     *
  24.       ' *      Copyright (c) 1983-1989 D. Thomas Mack, The Second Ring        *
  25.       ' ***********************************************************************
  26. '     $INCLUDE: 'CNFG-VAR.BAS'
  27.       CLEAR
  28. '
  29. ' ****************************************************************************
  30. ' *  DISPLAY THE CONFIG TITLE PAGE
  31. ' ****************************************************************************
  32. '
  33.       WIDTH 80
  34.       CLS
  35.       NOT.YET.IN$ = "[Not Implemented]"  ' Msg used in config for parm not yet implemented
  36.       NONE.PICKED$ = "<none>"    ' Standardized message
  37.       NUM.FILES = 8
  38.       NUM.GLOBAL = 4
  39.       NUM.MAIN = 18
  40.       NUM.SYSOP = 7
  41.       NUM.UTILITY = 12
  42.       NUM.LIBRARY = 7
  43.       VERSION.NUMBER$ = "17.2A"
  44.       I! = FRE(C$)
  45.       KEY OFF
  46.       CALL CNFGINIT
  47.       PRINT TAB(60)"tm"
  48.       PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
  49.       PRINT
  50.       PRINT TAB(17)"Capital PC User Group User-Supported Software"
  51.       PRINT
  52.       X$ = "    "
  53.       PRINT "Copyright (c) 1983-1989 D. Thomas Mack, 39 Cranbury Dr., Trumbull, CT. 06611"
  54.       PRINT
  55.       PRINT X$;"    If you are using RBBS-PC " + CONFIG.VERSION$ + " and find"
  56.       PRINT X$;"    it valuable, I suggest you consider a contribution to"
  57.       PRINT ""
  58.       PRINT X$;"                 Capital PC Software Exchange"
  59.       PRINT X$;"                     Post Office Box 6128"
  60.       PRINT X$;"                Silver Spring, Maryland  20906"
  61.       PRINT
  62.       PRINT X$;"    You are free to copy and share RBBS-PC with others on"
  63.       PRINT X$;"    these three conditions:"
  64.       PRINT X$;"      1.  This program is not distributed in modified form."
  65.       PRINT X$;"      2.  No fee or consideration is charged for RBBS-PC itself."
  66. 10230 PRINT X$;"      3.  This notice is not bypassed or removed."
  67.       PRINT
  68. '
  69. ' *  DEFINE THE FUNCTIONS USED BY CONFIG
  70. '
  71.       DEF FNTI! = CSNG(FIX((VAL(MID$(TIME$,1,2)) * 60 * 60) _
  72.                          + (VAL(MID$(TIME$,4,2)) * 60) _
  73.                          + (VAL(MID$(TIME$,7,2)) * 1)))
  74.       DEF FNHSH(X$) = ((ASC(X$) * 100  _
  75.                          + ASC(MID$(X$,(LEN(X$)/2) + .1,1)) * 10  _
  76.                          + ASC(RIGHT$(X$,1))) MOD MAX.USR.FILE.SIZE.FRM.DEF) + 1
  77.       DEF FNHSH2(X$) = (ASC(MID$(X$,2,1)) * 10 + 7) MOD MAX.USR.FILE.SIZE.FRM.DEF
  78.       DELAY! = FNTI! + 1
  79. 10480 GOSUB 60440
  80. 10490 LOCATE 22,15
  81.       PRINT SPC(64)
  82.       NODE.ID$ = ""
  83.       IF COMMAND$ <> "" THEN _
  84.         CONFIG.FILENAME$ = COMMAND$: _
  85.         GOTO 10530
  86.       CONFIG.FILENAME$ = "RBBS-PC.DEF"
  87.       CALL GETNUMYN ("Will you be running multiple copies of RBBS-PC",AB)
  88.       IF NOT AB THEN _
  89.          GOTO 10530
  90. 10510 GOSUB 22480
  91. '
  92. ' * CHECK TO SEE IF AN EXISTING "RBBS-PC.DEF" FILE EXISTS
  93. '
  94. 10530 ON ERROR GOTO 60010
  95.       FILE$ = CONFIG.FILENAME$
  96.       GOSUB 30000
  97.       M$ = "Z"
  98.       NO.DEF.FILE = FALSE
  99.       SUBBOARD = FALSE
  100.       IF OKAY THEN _
  101.          CALL CNFGINIT : _
  102.          GOTO 10536
  103.       IF LEN(CONFIG.FILENAME$) > 7 OR _
  104.          INSTR(CONFIG.FILENAME$,".") <> 0 THEN _
  105.          GOTO 10531
  106.       FILE$ = FILE$ + "C.DEF"
  107.       GOSUB 30000
  108.       IF OKAY THEN _
  109.          CALL CNFGINIT : _
  110.          CONFIG.FILENAME$ = FILE$ : _
  111.          GOTO 10536
  112.       CALL GETNUMYN ("Are you setting up a 'sub-board'",AB)
  113.       IF NOT AB THEN _
  114.          GOTO 10531
  115.       SUBBOARD = TRUE
  116.       BASE.NAME$ = CONFIG.FILENAME$
  117.       CONFIG.FILENAME$   = CONFIG.FILENAME$+"C.DEF"
  118. 10531 A$ = "Configuration file " + CONFIG.FILENAME$ + " not found.  Create new one"
  119.       CALL GETNUMYN (A$,AB)
  120.       IF NOT AB THEN _
  121.          SYSTEM
  122. 10532 X$ = "default location for RBBS files"
  123.       GOSUB 15205
  124.       DD$ = HJ$
  125.       CALL CNFGINIT
  126.       GOSUB 15790
  127.       BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  128.                        BULLETIN.MENU$
  129.       BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  130.                          BULLETIN.PREFIX$
  131.       NO.DEF.FILE = TRUE
  132.       GOTO 11710
  133. 10536 OPEN "I",#1,CONFIG.FILENAME$
  134. '
  135. ' * READ IN THE PARAMETERS FROM AN EXISTING "RBBS-PC.DEF" FILE
  136. '
  137. 11600 INPUT #1,CONFIG.FILE.VER$, _
  138.                DOWNLOAD.DRIVES$, _
  139.                SYSOP.PASSWORD.1$, _
  140.                SYSOP.PASSWORD.2$, _
  141.                SYSOP.FIRST.NAME$, _
  142.                SYSOP.LAST.NAME$, _
  143.                REQUIRED.RINGS, _
  144.                START.OFFICE.HOURS, _
  145.                END.OFFICE.HOURS, _
  146.                MINUTES.PER.SESSION!, _
  147.                MAX.ALLOWED.MSGS.FRM.DEF, _
  148.                ACT.MNTHS.B4.DELETING, _
  149.                UPLOAD.DIRECTORY$, _
  150.                EXPERT.USER, _
  151.                ACTIVE.BULLETINS, _
  152.                PROMPT.BELL, _
  153.                PCJR, _
  154.                MENUS.CAN.PAUSE, _
  155.                MENU$(1), _
  156.                MENU$(2), _
  157.                MENU$(3), _
  158.                MENU$(4), _
  159.                MENU$(5), _
  160.                MENU$(6), _
  161.                CONFERENCE.MENU$, _
  162.                CONFERENCE.VIEWER.SEC.LVL, _
  163.                WELCOME.INTERRUPTABLE, _
  164.                REMIND.FILE.TRANSFERS, _
  165.                PAGE.LENGTH, _
  166.                MAX.MESSAGE.LINES, _
  167.                DOORS.AVAILABLE, _
  168.                MO$
  169.       IF CONFIG.FILE.VER$ > VERSION.NUMBER$ OR _
  170.          CONFIG.FILE.VER$ < "17.1A" THEN _
  171.          PRINT "Config DEF file, " + CONFIG.FILENAME$ + " not " + CONFIG.VERSION$ : _
  172.          END
  173.       GOSUB 22340
  174. 11620 INPUT #1,MAIN.MESSAGE.FILE$, _
  175.                MAIN.MESSAGE.BACKUP$, _
  176.                CALLERS.FILE$, _
  177.                COMMENTS.FILE$, _
  178.                MAIN.USER.FILE$, _
  179.                WELCOME.FILE$, _
  180.                NEWUSER.FILE$, _
  181.                DIRECTORY.EXTENTION$, _
  182.                COM.PORT$, _
  183.                BULLETINS.OPTIONAL, _
  184.                USER.INIT.COMMAND$, _
  185.                RTS$, _
  186.                DOS.VERSION, _
  187.                FG, _
  188.                BG, _
  189.                BORDER, _
  190.                RBBS.BAT$, _
  191.                RCTTY.BAT$
  192.       GOSUB 22340
  193. 11640 INPUT #1,OMIT.MAIN.DIRECTORY$, _
  194.                FIRST.NAME.PROMPT$, _
  195.                HELP$(3), _
  196.                HELP$(4), _
  197.                HELP$(7), _
  198.                HELP$(9), _
  199.                BULLETIN.MENU$, _
  200.                BULLETIN.PREFIX$, _
  201.                DRIVE.FOR.BULLETINS$, _
  202.                MESSAGE.REMINDER, _
  203.                REQUIRE.NON.ASCII, _
  204.                ASK.EXTENDED.DESC, _
  205.                MAXIMUM.NUMBER.OF.NODES, _
  206.                NETWORK.TYPE, _
  207.                RECYCLE.TO.DOS, _
  208.                MAX.USR.FILE.SIZE.FRM.DEF, _
  209.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  210.                TRASHCAN.FILE$
  211.       DONT.ASK = TRUE
  212.       GOSUB 21895
  213.       DONT.ASK = FALSE
  214.       GOSUB 22340
  215. 11660 INPUT #1,MINIMUM.LOGON.SECURITY, _
  216.                DEFAULT.SECURITY.LEVEL, _
  217.                SYSOP.SECURITY.LEVEL, _
  218.                FILESEC.FILE$, _
  219.                SYSOP.MENU.SECURITY.LEVEL, _
  220.                CONFMAIL.LIST$, _
  221.                MAXIMUM.VIOLATIONS, _
  222.                SYSOP.FUNCTION(1), _
  223.                SYSOP.FUNCTION(2), _
  224.                SYSOP.FUNCTION(3), _
  225.                SYSOP.FUNCTION(4), _
  226.                SYSOP.FUNCTION(5), _
  227.                SYSOP.FUNCTION(6), _
  228.                SYSOP.FUNCTION(7), _
  229.                PASSWORD.FILE$, _
  230.                MAXIMUM.PASSWORD.CHANGES, _
  231.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  232.                OVERWRITE.SECURITY.LEVEL, _
  233.                DOORS.TERMINAL.TYPE, _
  234.                MAX.PER.DAY
  235.       GOSUB 22340
  236. 11680 INPUT #1,MAIN.FUNCTION(1), _
  237.                MAIN.FUNCTION(2), _
  238.                MAIN.FUNCTION(3), _
  239.                MAIN.FUNCTION(4), _
  240.                MAIN.FUNCTION(5), _
  241.                MAIN.FUNCTION(6), _
  242.                MAIN.FUNCTION(7), _
  243.                MAIN.FUNCTION(8), _
  244.                MAIN.FUNCTION(9), _
  245.                MAIN.FUNCTION(10), _
  246.                MAIN.FUNCTION(11), _
  247.                MAIN.FUNCTION(12), _
  248.                MAIN.FUNCTION(13), _
  249.                MAIN.FUNCTION(14), _
  250.                MAIN.FUNCTION(15), _
  251.                MAIN.FUNCTION(16), _
  252.                MAIN.FUNCTION(17), _
  253.                MAIN.FUNCTION(18), _
  254.                MIN.NEWCALLER.BAUD, _
  255.                WAIT.BEFORE.DISCONNECT
  256.       GOSUB 22340
  257. 11700 INPUT #1,FILES.FUNCTION(1), _
  258.                FILES.FUNCTION(2), _
  259.                FILES.FUNCTION(3), _
  260.                FILES.FUNCTION(4), _
  261.                FILES.FUNCTION(5), _
  262.                FILES.FUNCTION(6), _
  263.                FILES.FUNCTION(7), _
  264.                FILES.FUNCTION(8), _
  265.                UTILITY.FUNCTION(1), _
  266.                UTILITY.FUNCTION(2), _
  267.                UTILITY.FUNCTION(3), _
  268.                UTILITY.FUNCTION(4), _
  269.                UTILITY.FUNCTION(5), _
  270.                UTILITY.FUNCTION(6), _
  271.                UTILITY.FUNCTION(7), _
  272.                UTILITY.FUNCTION(8), _
  273.                UTILITY.FUNCTION(9), _
  274.                UTILITY.FUNCTION(10), _
  275.                UTILITY.FUNCTION(11), _
  276.                UTILITY.FUNCTION(12), _
  277.                GLOBAL.FUNCTION(1), _
  278.                GLOBAL.FUNCTION(2), _
  279.                GLOBAL.FUNCTION(3), _
  280.                GLOBAL.FUNCTION(4), _
  281.                UPLOAD.TIME.FACTOR!, _
  282.                COMPUTER.TYPE, _
  283.                REMIND.PROFILE, _
  284.                RBBS.NAME$, _
  285.                COMMANDS.BETWEEN.RINGS, _
  286.                MNP.SUPPORT, _
  287.                PAGING.PRINTER.SUPPORT$, _
  288.                MODEM.INIT.BAUD$
  289.       GOSUB 22340
  290. 11705 INPUT #1,TURN.PRINTER.OFF, _
  291.                DIRECTORY.PATH$, _
  292.                MIN.SEC.TO.VIEW, _
  293.                LIMIT.SEARCH.TO.FMS, _
  294.                DEFAULT.CATEGORY.CODE$, _
  295.                DIR.CATEGORY.FILE$, _
  296.                NEW.FILES.CHECK, _
  297.                MAX.DESC.LEN, _
  298.                SHOW.SECTION, _
  299.                COMMANDS.IN.PROMPT, _
  300.                NEWUSER.SETS.DEFAULTS, _
  301.                HELP.PATH$, _
  302.                HELP.EXTENSION$, _
  303.                MAIN.COMMANDS$, _
  304.                FILE.COMMANDS$, _
  305.                UTIL.COMMANDS$, _
  306.                GLOBAL.COMMANDS$, _
  307.                SYSOP.COMMANDS$
  308.       GOSUB 22340
  309. 11706 INPUT #1,RECYCLE.WAIT, _
  310.                LIBRARY.FUNCTION(1), _
  311.                LIBRARY.FUNCTION(2), _
  312.                LIBRARY.FUNCTION(3), _
  313.                LIBRARY.FUNCTION(4), _
  314.                LIBRARY.FUNCTION(5), _
  315.                LIBRARY.FUNCTION(6), _
  316.                LIBRARY.FUNCTION(7), _
  317.                LIBRARY.DRIVE$, _
  318.                LIBRARY.DIRECTORY.PATH$, _
  319.                LIBRARY.DIRECTORY.EXTENTION$, _
  320.                LIBRARY.WORK.DISK.PATH$, _
  321.                LIBRARY.MAX.DISK, _
  322.                LIBRARY.MAX.DIRECTORY, _
  323.                LIBRARY.MAX.SUBDIR, _
  324.                LIBRARY.SUBDIR.PREFIX$, _
  325.                LIBRARY.ARCHIVE.PATH$, _
  326.                LIBRARY.ARCHIVE.PROGRAM$, _
  327.                LIBRARY.COMMANDS$
  328.       GOSUB 22340
  329.       INPUT #1,UPLOAD.PATH$, _
  330.                FMS.DIRECTORY$, _
  331.                ANS.MENU$,_
  332.                REQUIRED.QUESTIONNAIRE$,_
  333.                REMEMBER.NEW.USERS, _
  334.                SURVIVE.NOUSER.ROOM, _
  335.                PROMPT.HASH$, _
  336.                START.HASH, _
  337.                LEN.HASH, _
  338.                PROMPT.INDIV$, _
  339.                START.INDIV, _
  340.                LEN.INDIV
  341.       GOSUB 22340
  342.       INPUT #1,BYPASS.MSGS, _
  343.                MUSIC, _
  344.                RESTRICT.BY.DATE, _
  345.                DAYS.TO.WARN, _
  346.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  347.                VOICE.TYPE, _
  348.                RESTRICT.VALID.CMDS, _
  349.                NEW.USER.DEFAULT.MODE, _
  350.                NEW.USER.LINE.FEEDS, _
  351.                ARKVIEW.PATH$, _        'ViewMod
  352.                NEW.USER.BELL, _
  353.                NEW.USER.CASE, _
  354.                MESSAGES.CAN.GROW, _
  355.                WRAP.CALLERS.FILE$, _
  356.                REDIRECT.IO.METHOD, _
  357.                AUTO.UPGRADE.SEC, _
  358.                HALT.ON.ERROR, _
  359.                NEW.PUBLIC.MSGS.SECURITY, _
  360.                NEW.PRIVATE.MSGS.SECURITY, _
  361.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  362.                SL.CATEGORIZE.UPLOADS, _
  363.                BAUDOT, _
  364.                TIME.TO.DROP.TO.DOS, _
  365.                EXPIRED.SECURITY, _
  366.                DTR.DROP.DELAY, _
  367.                ASK.IDENTITY, _
  368.                MAX.REG.SEC, _
  369.                BUFFER.SIZE, _
  370.                MLCOM, _
  371.                SHOOT.YOURSELF, _
  372.                DEFAULT.EXTENSION$, _
  373.                NEW.USER.DEFAULT.PROTOCOL$, _
  374.                NEW.USER.GRAPHICS$, _
  375.                NET.MAIL$, _
  376.                MASTER.DIRECTORY.NAME$, _
  377.                PROTO.DEF$, _
  378.                UPCAT.HELP$, _
  379.                ALWAYS.STREW.TO$, _
  380.                LAST.NAME.PROMPT$
  381.       GOSUB 22340
  382.       INPUT #1,PERSONAL.DRVPATH$, _
  383.                PERSONAL.DIR$, _
  384.                PERSONAL.BEGIN, _
  385.                PERSONAL.LEN, _
  386.                PERSONAL.PROTOCOL$, _
  387.                PERSONAL.CONCAT , _
  388.                PRIVATE.READ.SEC, _
  389.                PUBLIC.READ.SEC, _
  390.                SEC.CHANGE.MSG, _
  391.                KEEP.INIT.BAUD, _
  392.                MAIN.PUI$, _
  393.                DEFAULT.ECHOER$, _
  394.                HOST.ECHO.ON$, _
  395.                HOST.ECHO.OFF$, _
  396.                SWITCH.BACK, _
  397.                DEFAULT.LINE.ACK$, _
  398.                ALTDIR.EXTENSION$, _
  399.                DIRECTORY.PREFIX$
  400.       GOSUB 22340
  401.       INPUT #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  402.                MODEM.INIT.WAIT.TIME, _
  403.                MODEM.COMMAND.DELAY.TIME, _
  404.                TURBO.RBBS
  405.       GOSUB 22340
  406. 11707 INPUT #1,DNLD.SUB, _
  407.                WILL.SUBDIRS.B.USED, _
  408.                UPLOAD.TO.SUBDIR, _
  409.                DOWNLOAD.TO.SUBDIR, _
  410.                UPLOAD.SUBDIR$, _
  411.                MIN.OLDCALLER.BAUD, _
  412.                MAX.WORK.VAR, _
  413.                DISKFULL.GO.OFFLINE, _
  414.                EXTENDED.LOGGING, _
  415.                USER.RESET.COMMAND$, _
  416.                USER.COUNT.RINGS.COMMAND$, _
  417.                USER.ANSWER.COMMAND$, _
  418.                USER.GO.OFFHOOK.COMMAND$, _
  419.                DISK.FOR.DOS$, _
  420.                DUMB.MODEM, _
  421.                COMMENTS.AS.MESSAGES, _
  422.                LSB, _
  423.                MSB, _
  424.                LINE.CONTROL.REGISTER, _
  425.                MODEM.CONTROL.REGISTER, _
  426.                LINE.STATUS.REGISTER, _
  427.                MODEM.STATUS.REGISTER
  428.       GOSUB 22340
  429.       INPUT #1,KEEP.TIME.CREDITS, _
  430.                XON.XOFF, _
  431.                ALLOW.CALLER.TURBO, _
  432.                USE.DEVICE.DRIVER$, _
  433.                PRELOG$, _
  434.                NEW.USER.QUESTIONNAIRE$, _
  435.                EPILOG$, _
  436.                REGISTRATION.PROGRAM$, _
  437.                QUES.PATH$, _
  438.                USER.LOCATION$, _
  439.                USER.INITIALIZE.COMMAND$, _
  440.                USER.FIRMWARE.CLEAR.CMND$, _
  441.                USER.FIRMWARE.WRITE.CMND$, _
  442.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  443.                SIZE.OF.STACK, _
  444.                SECURITY.EXEMPT.FROM.EPILOG, _
  445.                USE.BASIC.WRITES, _
  446.                DOSANSI, _
  447.                ESCAPE.INSECURE, _
  448.                USE.DIR.ORDER, _
  449.                ADD.DIR.SECURITY, _
  450.                MAX.EXTENDED.LINES, _
  451.                DF$
  452.       GOSUB 22340
  453.       INPUT #1,LOGON.MAIL.LEVEL$, _
  454.                MACRO.DRVPATH$, _
  455.                MACRO.EXTENSION$, _
  456.                EMPHASIZE.ON.DEF$, _
  457.                EMPHASIZE.OFF.DEF$, _
  458.                FG.1.DEF$, _
  459.                FG.2.DEF$, _
  460.                FG.3.DEF$, _
  461.                FG.4.DEF$, _
  462.                SECVIO.HLP$, _
  463.                FOSSIL, _
  464.                MAX.CARRIER.WAIT, _
  465.                CALLER.BKGRD, _
  466.                SMART.TEXT, _
  467.                TIME.LOCK, _
  468.                WRITE.BUF.DEF, _
  469.                SEC.KILL.ANY, _
  470.                DOORS.DEF$, _
  471.                SCREEN.OUT.MSG$, _
  472.                AUTOPAGE.DEF$
  473.       GOSUB 21905
  474.       GOSUB 22340
  475.       IF MAX.CARRIER.WAIT < 1 THEN _
  476.          MAX.CARRIER.WAIT = 30
  477.       CALL ANSIDECODE (FG.1.DEF$)
  478.       CALL ANSIDECODE (FG.2.DEF$)
  479.       CALL ANSIDECODE (FG.3.DEF$)
  480.       CALL ANSIDECODE (FG.4.DEF$)
  481.       IF LEFT$(MACRO.EXTENSION$,1) = "." THEN _
  482.          MACRO.EXTENSION$ = RIGHT$(MACRO.EXTENSION$,LEN(MACRO.EXTENSION$)-1)
  483.       IF DNLD.SUB < 1 OR DNLD.SUB > 99 THEN _
  484.          GOTO 11710
  485.       FOR I = 1 TO DNLD.SUB
  486.          INPUT #1,DNLD$(I)
  487.       NEXT
  488.       GOSUB 22340
  489. '
  490. ' * CONVERT "RBBS-PC.DEF" PARAMETERS TO DISPLAYABLE VALUES, AS REQUIRED
  491. '
  492. 11710 IF CALLERS.FILE$ = "" THEN _
  493.          CALLERS.FILE$ = NONE.PICKED$
  494.       IF ALTDIR.EXTENSION$ = "" THEN _
  495.          ALTDIR.EXTENSION$ = NONE.PICKED$
  496.       IF ALWAYS.STREW.TO$ = "" THEN _
  497.          ALWAYS.STREW.TO$ = NONE.PICKED$
  498.       IF QUES.PATH$ = "" THEN _
  499.          QUES.PATH$ = NONE.PICKED$
  500.       IF NEW.USER.QUESTIONNAIRE$ = "" THEN _
  501.          NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$
  502.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  503.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  504.       IF NET.MAIL$ = "NONE" THEN _
  505.          NET.MAIL$ = NONE.PICKED$
  506.       IF CONFMAIL.LIST$ = "" THEN _
  507.          CONFMAIL.LIST$ = NONE.PICKED$
  508.       X$ = BULLETIN.MENU$
  509.       CALL BRKFNAME (X$,Z$,BULLETIN.MENU$,Y$,-1)
  510.       IF Y$ <> "" THEN _
  511.          BULLETIN.MENU$ = BULLETIN.MENU$ + Y$
  512.       X$ = BULLETIN.PREFIX$
  513.       CALL BRKFNAME (X$,Z$,BULLETIN.PREFIX$,Y$,-1)
  514.       IF RECYCLE.TO.DOS = 0 THEN _
  515.          RECYCLE.TO.DOS$ = "INTERNAL" _
  516.       ELSE RECYCLE.TO.DOS$ = "SYSTEM
  517.       HELP.FILE.PREFIX$ = LEFT$(HELP$(3),LEN(HELP$(3)) - 1)
  518.       SF = SYSOP.FUNCTION(1)
  519.       GOSUB 16062
  520.       FOR I = 2 TO NUM.SYSOP
  521.          IF SYSOP.FUNCTION(I) > SF THEN _
  522.             GOTO 11790
  523.          SF = SYSOP.FUNCTION(I)
  524. 11790 NEXT
  525.       MM = MAIN.FUNCTION(1)
  526.       FOR I = 1 TO NUM.MAIN
  527.          MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1)
  528.          IF MAIN.FUNCTION(I)    > MM THEN _
  529.             GOTO 11810
  530.          MM = MAIN.FUNCTION(I)
  531. 11810 NEXT
  532.       FC = FILES.FUNCTION(1)
  533.       FOR I = 1 TO NUM.FILES
  534.          FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1)
  535.          IF FILES.FUNCTION(I) > FC THEN _
  536.             GOTO 11830
  537.          FC = FILES.FUNCTION(I)
  538. 11830 NEXT
  539.       UE = UTILITY.FUNCTION(1)
  540.       FOR I = 1 TO NUM.UTILITY
  541.          UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1)
  542.          IF UTILITY.FUNCTION(I) > UE THEN _
  543.             GOTO 11850
  544.          UE = UTILITY.FUNCTION(I)
  545. 11850 NEXT
  546.       PS = LIBRARY.FUNCTION(1)
  547.       FOR I = 1 TO NUM.LIBRARY
  548.          LIBRARY.FUNCTION$(I,2) = MID$(LIBRARY.COMMANDS$,I,1)
  549.          IF LIBRARY.FUNCTION(I) > PS THEN _
  550.            GOTO 11860
  551.          PS = LIBRARY.FUNCTION(I)
  552. 11860 NEXT
  553.       FOR I = 1 TO NUM.GLOBAL
  554.          GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1)
  555.       NEXT
  556.       CLOSE #1
  557.       GOSUB 50480
  558.       GOSUB 50530
  559. 11870 IF EXPERT.USER = 0 THEN _
  560.          EXPERT.USER$ = "NOVICE
  561.       IF EXPERT.USER = -1 THEN _
  562.          EXPERT.USER$ = "EXPERT
  563.       DRIVE.FOR.UPLOADS$ = RIGHT$(DOWNLOAD.DRIVES$,1)
  564.       DRIVES.FOR.DOWNLOADS$ = LEFT$(DOWNLOAD.DRIVES$,(LEN(DOWNLOAD.DRIVES$) - 1))
  565.       PROMPT.BELL$ = "ON"
  566.       IF PROMPT.BELL = 0 THEN _
  567.          PROMPT.BELL$ = "OFF
  568.       GOSUB 15780
  569.       IF SYSOP.PASSWORD.1$ = "" OR SYSOP.PASSWORD.2$ = "" THEN _
  570.          MN1$ = "<Disabled>" : _
  571.          MN2$ = "" _
  572.       ELSE MN1$ = SYSOP.PASSWORD.1$ : _
  573.            MN2$ = SYSOP.PASSWORD.2$
  574.       M11$ = "NO"
  575.       IF PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7) THEN _
  576.          M11$ = "YES"
  577.       IF START.HASH < 1 THEN _
  578.          START.HASH = 1
  579.       IF LEN.HASH < 2 THEN _
  580.          LEN.HASH = 31
  581.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  582.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  583.       GOSUB 18002
  584.       GOSUB 18102
  585.       I = 1
  586.       GOSUB 13030
  587.       IF NO.DEF.FILE = FALSE THEN _
  588.          GOTO 12151
  589.       IF NOT SUBBOARD THEN _
  590.          GOTO 12151
  591.       MAIN.MESSAGE.FILE$ = BASE.NAME$+"M.DEF"
  592.       MAIN.USER.FILE$    = BASE.NAME$+"U.DEF"
  593. 12151 CONFERENCE.MODE = 0
  594.       SUBBOARD = FALSE
  595.       MAINMSG$ = MAIN.MESSAGE.FILE$
  596.       MAINUSR$ = MAIN.USER.FILE$
  597. 12160 KEY OFF
  598. '
  599. ' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.
  600. '
  601.       FILE$ = MAIN.MESSAGE.FILE$
  602.       GOSUB 30000
  603.       NO.OLD.FILE = FALSE
  604.       IF OKAY THEN _           ' IF MESSAGE FILE EXISTS, READ CHECKPOINT RECORD
  605.          GOTO 12170
  606.       NO.OLD.FILE = TRUE
  607.       A$ = "Message file " + MAIN.MESSAGE.FILE$ + " not found.  Create new one"
  608.       CALL GETNUMYN (A$,AB)
  609.       IF NOT AB THEN _
  610.          SYSTEM
  611.       CALLS.TODATE! = 0                                 ' FIRST MSG#    -- 0
  612.       FIRST.USER.RECORD = 1                             ' USERS file    -- first record number
  613.       CURRENT.USER.COUNT = FIRST.USER.RECORD            ' USERS file    -- next available record number
  614.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF   ' USERS file    -- last record number
  615.       FIRST.MESSAGE.RECORD = 2+MAXIMUM.NUMBER.OF.NODES  ' MESSAGES file -- first record of messages
  616.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD        ' MESSAGES file -- next available record number
  617.       HIGHEST.MESSAGE.RECORD = 5 * MAX.ALLOWED.MSGS.FRM.DEF _
  618.                                + 1 _
  619.                                + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
  620.       MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF  ' MESSAGES file -- maximum number of messages
  621.       B1 = MAXIMUM.NUMBER.OF.NODES
  622.       B3! = HIGHEST.MESSAGE.RECORD
  623.       GOSUB 22080
  624.       GOSUB 30450                        ' UPDATE CHECKPOINT RECORD
  625. 12170 GOSUB 30040                        ' READ THE CHECKPOINT RECORD
  626.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  627.       MAX.ALLOWED.MSGS.FRM.DEF  = INT((HIGHEST.MESSAGE.RECORD - FIRST.MESSAGE.RECORD) / 5) + 1
  628.       IF MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  629.          MAX.ALLOWED.MSGS.FRM.DEF = 999
  630.       IF MAXIMUM.NUMBER.OF.MSGS < 1 THEN _
  631.          MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF : _
  632.          GOSUB 30450                     ' READ THE CHECKPOINT RECORD
  633.       FILE$ = MAIN.USER.FILE$            ' Check for USERS file
  634.       GOSUB 30000
  635.       NO.OLD.FILE = FALSE
  636.       IF OKAY THEN _
  637.          GOSUB 50500 : _
  638.          GOTO 12189
  639.       NO.OLD.FILE = TRUE
  640.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  641.       A$ = MAIN.USER.FILE$
  642.       GOSUB 22140
  643.       GOSUB 22150
  644. 12189 FOR I = 1 TO 10
  645.          KEY I,""
  646.       NEXT
  647.       NO.OLD.FILE = FALSE
  648.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  649.       GOSUB 22140
  650.       IF NO.DEF.FILE = FALSE THEN  _
  651.          GOTO 12190
  652.       GOSUB 18700
  653.       NO.DEF.FILE = FALSE
  654. '
  655. ' *  DISPLY CONFIG'S MAIN FUNCTION KEY MENU
  656. '
  657. 12190 IF KSTACKED$ = "" THEN _
  658.          IX = 0
  659. 12320 CALL DISPLAY
  660.       IF IX = 21 THEN _
  661.          GOTO 22350
  662.       ON IPAGE GOTO 12622, _  ' 1        F1 - Global Parameters (part 1)
  663.                     12624, _  ' 2        F2 - Global Parameters (part 2)
  664.                     12626, _  ' 3        F3 - Global Parameters (part 3)
  665.                     12628, _  ' 4        F4 - RBBS-PC System Files (part 1)
  666.                     12630, _  ' 5        F5 - RBBS-PC System Files (part 2)
  667.                     12632, _  ' 6        F6 - RBBS-PC "doors"
  668.                     12634, _  ' 7        F7 - RBBS-PC security (part 1)
  669.                     12636, _  ' 8        F8 - RBBS-PC security (part 2)
  670.                     12640, _  ' 9        F9 - Multiple RBBS-PC parameters
  671.                     12641, _  '10       F10 - RBBS-PC's Utilities
  672.                     12642, _  '11  Shift-F1 - RBBS-PC File Manager
  673.                     12643, _  '12  Shift-F2 - RBBS-PC comm. parameters (part 1)
  674.                     12644, _  '13  Shift-F3 - RBBS-PC comm. parameters (part 2)
  675.                     12645, _  '14  Shift-F4 - RBBS-PC Net Mail
  676.                     12646, _  '15  Shift-F5 - New user's parameters
  677.                     12647, _  '16  Shift-F6 - Library parameters
  678.                     12648     '17  Shift-F7 - RBBS-PC Color parameters
  679. '
  680. ' *  HANDLE UNSUPPORTED REQUEST
  681. '
  682. 12325 IX = IPAGE
  683.       GOTO 12320
  684. 12622 ON ILOOKUP GOSUB 12840, _  '   1 SYSOP's first name
  685.                        12910, _  '   2 SYSOP's last name
  686.                        13140, _  '   3 SYSOP's default signon mode
  687.                        13210, _  '   4 SYSOP's office hours
  688.                        13224, _  '   5 Page SYSOP with printer's bell
  689.                        13249, _  '   6 Go off-line when disk is full
  690.                        13750, _  '   7 Prompt bell
  691.                        13840, _  '   8 Maximum minutes per session
  692.                        16650, _  '   9 Maximum minutes per day
  693.                        15234, _  '  10 Factor to extend time for uploads
  694.                        13940, _  '  11 Months of inactivity before deleted
  695.                        13131, _  '  12 Name of this RBBS-PC
  696.                        15530, _  '  13 Foreground color
  697.                        15590, _  '  14 Background color
  698.                        15650, _  '  15 Border color
  699.                        13320, _  '  16 ANSI.SYS in CONFIG.SYS?
  700.                        13330, _  '  17 Control code for Smart Text
  701.                        17725, _  '  18 AutoPage def file
  702.                        13000, _  '  19 Level of logon mail report
  703.                        12325     '  20
  704.       GOTO 12325
  705. 12624 ON ILOOKUP GOSUB 15800, _  '  21 Remind users of messages they left
  706.                        16690, _  '  22 Remind users of uploads and downloads
  707.                        16722, _  '  23 Remind users of their profile
  708.                        17600, _  '  24 Enable download of new files at logon
  709.                        16730, _  '  25 Specify default page length
  710.                        16790, _  '  26 Set maximum number of lines/message
  711.                        16000, _  '  27 Is system "welcome" interruptable?
  712.                        15840, _  '  28 Are the system bulletins optional?
  713.                        16040, _  '  29 Type of PC running RBBS-PC
  714.                        17230, _  '  30 Symbols for SYSOP's commands
  715.                        17240, _  '  31 Symbols for main menu's commands
  716.                        17250, _  '  32 Symbols for file menu's commands
  717.                        17260, _  '  33 Symbols for utilities menu's commands
  718.                        17264, _  '  34 Symbols for "global" commands
  719.                        17500, _  '  35 Show section at command prompt?
  720.                        17550, _  '  36 Show commands at command prompt?
  721.                        15830, _  '  37 Restrict valid cmnds to current section
  722.                        15820, _  '  38 Use machine language subroutines?
  723.                        15825, _  '  39 Use BASIC PRINT for screen writes?
  724.                        16795     '  40 Set max # of lines for extended desc
  725.       GOTO 12325
  726. 12626 ON ILOOKUP GOSUB 18000, _  '  41 Field used to locate a users record
  727.                        18100, _  '  42 Field to distinguish users with same id
  728.                        17800, _  '  43 Where personal id begins in user rec
  729.                        17810, _  '  44 Length of personal id in user rec
  730.                        17830, _  '  45 First Name prompt
  731.                        17840, _  '  46 Last Name prompt
  732.                        17850, _  '  47 Enforce upload/download ratios
  733.                        17630, _  '  48 Restrict users by date
  734.                        18510, _  '  49 Security level when subscription expires
  735.                        18530, _  '  50 Days before expiration to warn user
  736.                        18520, _  '  51 Days a newuser gets when registers
  737.                        17610, _  '  52 Turn printer off on recycle
  738.                        17620, _  '  53 Play music for RBBS themes?
  739.                        21760, _  '  54 Buffer size for text files
  740.                        16032, _  '  55 Size of stack space to use
  741.                        22550, _  '  56 Notify users when SYSOP wants system?
  742.                        17845, _  '  57 Ask users their (city/state)
  743.                        17625, _  '  58 Order show dirs for ALL option
  744.                        21770, _  '  59 Buffer size on writes
  745.                        21900     '  60 Voice synthesizer support
  746.       GOTO 12325
  747. 12628 ON ILOOKUP GOSUB 14790, _  '  61 Drive and file describing bulletins
  748.                        15290, _  '  62 Number of active bulletins
  749.                        14800, _  '  63 Prefix used to name bulletin files
  750.                        14810, _  '  64 Drive and path for 'help' files
  751.                        14820, _  '  65 Prefix of nine major help files
  752.                        14825, _  '  66 Extension for individual help files
  753.                        14915, _  '  67 Help file for categorizing uploads
  754.                        14830, _  '  68 Name of 'newuser' file
  755.                        14840, _  '  69 Name of 'welcome" file
  756.                        14860, _  '  70 Name of SYSOP's commands menu
  757.                        14870, _  '  71 Name of main message command menu
  758.                        14880, _  '  72 Name of file subsystem command menu
  759.                        14890, _  '  73 Name of utilities command menu
  760.                        14900, _  '  74 Menu listing available conferences
  761.                        14905, _  '  75 Menu of questionnaires
  762.                        14815, _  '  76 Drive/path for optional questionnaires
  763.                        18310, _  '  77 Name of main PUI
  764.                        15835, _  '  78 Can menus pause in the middle?
  765.                        15850, _  '  79 Macro drive/path
  766.                        15860     '  80 Macro extension
  767.       GOTO 12325
  768. 12630 ON ILOOKUP GOSUB 14910, _  '  81 File of unacceptable user names
  769.                        17700, _  '  82 Name of required questionnaire
  770.                        17710, _  '  83 Name of "prelog" file
  771.                        17720, _  '  84 Name of New User questionnaire
  772.                        17730, _  '  85 Name of "epilog" questionnaire
  773.                        15460, _  '  86 Name of 'message' file
  774.                        15500, _  '  87 Name of 'user' file
  775.                        15464, _  '  88 Name of 'comments' file
  776.                        15993, _  '  89 Record comments as private messages?
  777.                        15461, _  '  90 Name of 'callers' file
  778.                        15991, _  '  91 Extened logging to 'callers' file?
  779.                        22550, _  '  92 Wrap-around the 'callers' file?
  780.                        12670, _  '  93 Conferences to search for new mail
  781.                        21780, _  '  94 Max # of work variables
  782.                        12325, _  '  95
  783.                        12325, _  '  96
  784.                        12325, _  '  97
  785.                        12325, _  '  98
  786.                        12325, _  '  99
  787.                        12325     ' 100
  788.       GOTO 12325
  789. 12632 ON ILOOKUP GOSUB 16290, _  ' 101 Are 'doors' available?
  790.                        16130, _  ' 102 Name of menu listing available doors
  791.                        16140, _  ' 103 Name of file built dynamically for doors
  792.                        16150, _  ' 104 Name of .BAT the will re-invoke RBBS
  793.                        16160, _  ' 105 Drive to look for COMMAND.COM on
  794.                        16170, _  ' 106 Enable CTTY command for doors
  795.                        18640, _  ' 107 Name of program to invoke at logon
  796.                        17215, _  , 108 Who subject to logon door
  797.                        18625, _  ' 109 Doors control file
  798.                        12325, _  ' 110
  799.                        12325, _  ' 111
  800.                        12325, _  ' 112
  801.                        12325, _  ' 113
  802.                        12325, _  ' 114
  803.                        12325, _  ' 115
  804.                        12325, _  ' 116
  805.                        12325, _  ' 117
  806.                        12325, _  ' 118
  807.                        12325, _  ' 119
  808.                        12325     ' 120
  809.       GOTO 12325
  810. 12634 ON ILOOKUP GOSUB 12980, _  ' 121 Pseudonym to sign on remotely as SYSOP
  811.                        12990, _  ' 122 Escape logs on with no security
  812.                        17160, _  ' 123 Minimum security level to logon
  813.                        17170, _  ' 124 Default security level for new users
  814.                        17180, _  ' 125 SYSOP's security level
  815.                        17200, _  ' 126 Minimum security to see SYSOP's menu
  816.                        17210, _  ' 127 Min security to add extended desc
  817.                        17220, _  ' 128 Max # security violations allowed
  818.                        17230, _  ' 129 Security levels for SYSOP commands
  819.                        17240, _  ' 130 Security levels for main commands
  820.                        17250, _  ' 131 Security levels for file commands
  821.                        17260, _  ' 132 Security levels for utilities commands
  822.                        17264, _  ' 133 Security level for 'global' commands'
  823.                        17290, _  ' 134 Max # password changes allowed
  824.                        17300, _  ' 135 Min. security for temp. passwords
  825.                        17310, _  ' 136 Min. security to overwrite on uploads
  826.                        17316, _  ' 137 User's security exempted from packing
  827.                        15310, _  ' 138 Default security to read new Priv. Msg.
  828.                        15320, _  ' 139 Default security to read new Public Msg.
  829.                        15330     ' 140 Min. security to change msg.'s security
  830.       GOTO 12325
  831. 12636 ON ILOOKUP GOSUB 22550, _  ' 141 Call back verification of all/new users
  832.                        18630, _  ' 142 Drive/path for personal files
  833.                        12750, _  ' 143 Name of personal directory
  834.                        17820, _  ' 144 What protocol required for personal dnld
  835.                        17190, _  ' 145 File listing download-secured files
  836.                        17270, _  ' 146 File name with privileged passwords
  837.                        17645, _  ' 147 Concatenate ASCII files in pers. dnld?
  838.                        18515, _  ' 148 Security level to categorize uploads
  839.                        18500, _  ' 149 Min. security to view new uploads
  840.                        16033, _  ' 150 Security level exempt from "epilog"
  841.                        18545, _  ' 151 Min. security to automatically add users
  842.                        18340, _  ' 152 Min. security to use turbo logon
  843.                        18345, _  ' 153 Min. security to add dir entry
  844.                        17280, _  ' 154 Help file for security violation
  845.                        18330, _  ' 155 Time Lock Selection
  846.                        17640, _  ' 156 Auto upgrade security from main
  847.                        17635, _  ' 157 Min sec to read/kill all msgs
  848.                        13010, _  ' 158 How screen out lines from msg
  849.                        12325, _  ' 159
  850.                        12325     ' 160
  851.       GOTO 12325
  852. 12640 ON ILOOKUP GOSUB 21750, _  ' 161 Maximum number of concurrent RBBS-PC's
  853.                        21810, _  ' 162 Environment running RBBS-PC
  854.                        21950, _  ' 163 Method that RBBS-PC re-cycles with
  855.                        21910, _  ' 164 Number of records in 'user' file
  856.                        22040, _  ' 165 Number of records in 'message' file
  857.                        13890, _  ' 166 Maximum number of messages allowed
  858.                        25040, _  ' 167 Conference file maintenance
  859.                        14845, _  ' 168 Default extension compressed files
  860.                        22030, _  ' 169 Can messages grow
  861.                        12325, _  ' 170
  862.                        12325, _  ' 171
  863.                        12325, _  ' 172
  864.                        12325, _  ' 173
  865.                        12325, _  ' 174
  866.                        12325, _  ' 175
  867.                        12325, _  ' 176
  868.                        12325, _  ' 177
  869.                        12325, _  ' 178
  870.                        12325, _  ' 179
  871.                        12325     ' 180
  872.       IF REFRESH = 1 THEN _
  873.          REFRESH = 0 : _
  874.          GOTO 12151
  875.       IF REFRESH = 2 THEN _
  876.          REFRESH = 0 : _
  877.          GOTO 12160
  878.       GOTO 12325
  879. 12641 ON ILOOKUP GOSUB 23160, _  ' 181 Pack the 'messages' file
  880.                        22570, _  ' 182 Rebuild the 'user' file
  881.                        23630, _  ' 183 Print the message headers
  882.                        23740, _  ' 184 Renumber messages
  883.                        23620, _  ' 185 Repair the 'message' file
  884.                        24050, _  ' 186 Require users to answer questionnaire
  885.                        24790, _  ' 187 Check FMS directory
  886.                        13180, _  ' 188 Check Personal Download directory
  887.                        18700, _  ' 189 Check critical parameters
  888.                        18800, _  ' 190 Set New parameters
  889.                        24795, _  ' 191 Reset active printers for all nodes
  890.                        24040, _  ' 192 Set Highlight to match graphics
  891.                        12325, _  ' 193
  892.                        12325, _  ' 194
  893.                        12325, _  ' 195
  894.                        12325, _  ' 196
  895.                        12325, _  ' 197
  896.                        12325, _  ' 198
  897.                        12325, _  ' 199
  898.                        12325     ' 200
  899.       GOTO 12325
  900. 12642 ON ILOOKUP GOSUB 14920, _  ' 201 Drive available for uploading
  901.                        12730, _  ' 202 Name of directory for uploading
  902.                        18550, _  ' 203 Drive/path for upload dir
  903.                        13470, _  ' 204 Drive(s) available for downloading
  904.                        25380, _  ' 205 Are DOS subdirectories used?
  905.                        25420, _  ' 206 Upload to a DOS subdirectory?
  906.                        25460, _  ' 207 Are downloads from DOS subdirectories?
  907.                        25495, _  ' 208 List, change, add, delete subdir.?
  908.                        14850, _  ' 209 Extension for file directories
  909.                        14855, _  ' 210 Alternate directory extension
  910.                        14857, _  ' 211 Name (prefix) of dir of dir
  911.                        15920, _  ' 212 Omit directory list from N>ew command?
  912.                        18350, _  ' 213 Copy upload descriptions to another file
  913.                        12740, _  ' 214 FMS directory name
  914.                        17590, _  ' 215 Limit file searches to upload dir
  915.                        18200, _  ' 216 Default category codes for uploads
  916.                        18300, _  ' 217 File name with valid category codes
  917.                        18360, _  ' 218 Restrict dir search for 'ALL' to
  918.                        18400, _  ' 219 Length of description of uploads
  919.                        18600     ' 220 Drive/path directory files
  920.       GOTO 12325
  921. 12643 ON ILOOKUP GOSUB 14120, _  ' 221 Communications Port being used
  922.                        15240, _  ' 222 Seconds for modem to initalize
  923.                        15250, _  ' 223 Seconds to wait before issuing cmds.
  924.                        13228, _  ' 224 Number of rings to answer on
  925.                        15710, _  ' 225 Use standard RBBS-PC modem commands
  926.                        15911, _  ' 226 Microcom's MNP available?
  927.                        16121, _  ' 227 Issue modem commands between rings?
  928.                        16124, _  ' 228 Baud rate to initially open modem at
  929.                        16031, _  ' 229 Seconds to wait before disconnecting
  930.                        16725, _  ' 230 Is a dumb modem being used?
  931.                        23731, _  ' 231 Initialize Hayes 2400 firmware
  932.                        18540, _  ' 232 DTR drop delay time
  933.                        18620, _  ' 233 Where external protocol pgms are
  934.                        17650, _  ' 234 Always check for autodownload support
  935.                        15880, _  ' 235 Require non-ASCII protocol?
  936.                        13280, _  ' 236 If no calls, recycle after
  937.                        13290, _  ' 237 Leave modem at initial baud
  938.                        12325, _  ' 238
  939.                        12325, _  ' 239
  940.                        12325     ' 240
  941.       GOTO 12325
  942. 12644 ON ILOOKUP GOSUB 13295, _  ' 241 Switch back when change comm. parms.
  943.                        13238, _  ' 242 Min. baud for new callers
  944.                        13242, _  ' 243 Min. baud for old callers
  945.                        13260, _  ' 244 Use CTS for modem flow control?
  946.                        13310, _  ' 245 Use XON/XOFF for flow control
  947.                        13270, _  ' 246 Max time to wait for carrier
  948.                        12325, _  ' 247
  949.                        12325, _  ' 248
  950.                        12325, _  ' 249
  951.                        12325, _  ' 250
  952.                        12325, _  ' 251
  953.                        12325, _  ' 252
  954.                        12325, _  ' 253
  955.                        12325, _  ' 254
  956.                        12325, _  ' 255
  957.                        12325, _  ' 256
  958.                        12325, _  ' 257
  959.                        12325, _  ' 258
  960.                        12325, _  ' 259
  961.                        12325     ' 260
  962.       GOTO 12325
  963. 12645 ON ILOOKUP GOSUB 26040, _  ' 261 Time of day to drop to DOS
  964.                        26070, _  ' 262 NET-MAIL driver to invoke
  965.                        26100, _  ' 263 Echo on command for host
  966.                        26110, _  ' 264 Echo off command for host
  967.                        13285, _  ' 265 Echo remote input?
  968.                        26105, _  ' 266 ASCII upload line acknowledge
  969.                        12325, _  ' 267
  970.                        12325, _  ' 268
  971.                        12325, _  ' 269
  972.                        12325, _  ' 270
  973.                        12325, _  ' 271
  974.                        12325, _  ' 272
  975.                        12325, _  ' 273
  976.                        12325, _  ' 274
  977.                        12325, _  ' 275
  978.                        12325, _  ' 276
  979.                        12325, _  ' 277
  980.                        12325, _  ' 278
  981.                        12325, _  ' 279
  982.                        12325     ' 280
  983.       GOTO 12325
  984. 12646 ON ILOOKUP GOSUB 17560, _  ' 281 Prompt new users for their preferences
  985.                        22550, _  ' 282 New users default sign-on mode
  986.                        22550, _  ' 283 New users default file-transfer mode
  987.                        22550, _  ' 284 Line feeds for new users default to
  988.                        20018, _  ' 285 Work drive/path for View Mod    'Viewmod
  989.                        22550, _  ' 286 Prompt bell for new users defaults to
  990.                        22550, _  ' 287 New users 'graphics' ability is
  991.                        22550, _  ' 288 New users upper/lower case
  992.                        22550, _  ' 289 New users margins defaults are
  993.                        17570, _  ' 290 Remember new users
  994.                        17580, _  ' 291 Survive no user room
  995.                        12325, _  ' 292
  996.                        12325, _  ' 293
  997.                        12325, _  ' 294
  998.                        12325, _  ' 295
  999.                        12325, _  ' 296
  1000.                        12325, _  ' 297
  1001.                        12325, _  ' 298
  1002.                        12325, _  ' 299
  1003.                        12325     ' 300
  1004.       GOTO 12325
  1005. 12647 ON ILOOKUP GOSUB 20000, _  ' 301 Drive for Library
  1006.                        20010, _  ' 302 Drive/path for directory
  1007.                        20020, _  ' 303 Extension for directory lists
  1008.                        20030, _  ' 304 Drive/path for work disk
  1009.                        20040, _  ' 305 # of disks in Library
  1010.                        20050, _  ' 306 # of Master directories
  1011.                        20060, _  ' 307 # of subdirectories in each master
  1012.                        20070, _  ' 308 Prefix of subdirectory on Library
  1013.                        20080, _  ' 309 Name of subsystem command menu
  1014.                        20090, _  ' 310 Symbols to use for menu commands
  1015.                        20090, _  ' 311 Security levels for menu functions
  1016.                        20100, _  ' 312 Drive/path of ARCHIVE utility
  1017.                        20110, _  ' 313 Name of ARCHIVE utility
  1018.                        12325, _  ' 314
  1019.                        12325, _  ' 315
  1020.                        12325, _  ' 316
  1021.                        12325, _  ' 317
  1022.                        12325, _  ' 318
  1023.                        12325, _  ' 319
  1024.                        12325     ' 320
  1025.       GOTO 12325
  1026. 12648 ON ILOOKUP GOSUB 26115, _  ' 321 Turn on Emphasis
  1027.                        26120, _  ' 322 Restore text to normal
  1028.                        12850, _  ' 323 1st Foreground Color
  1029.                        12860, _  ' 324 2nd Foreground Color
  1030.                        12870, _  ' 325 3rd Foreground Color
  1031.                        12880, _  ' 326 4th Foreground Color
  1032.                        12890, _  ' 327 Caller Background Color
  1033.                        12325, _  ' 328
  1034.                        12325, _  ' 329
  1035.                        12325, _  ' 330
  1036.                        12325, _  ' 331
  1037.                        12325, _  ' 332
  1038.                        12325, _  ' 333
  1039.                        12325, _  ' 334
  1040.                        12325, _  ' 335
  1041.                        12325, _  ' 336
  1042.                        12325, _  ' 337
  1043.                        12325, _  ' 338
  1044.                        12325, _  ' 339
  1045.                        12325     ' 340
  1046.       GOTO 12325
  1047. '
  1048. ' * LIST OF CONFERENCES TO SEARCH FOR NEW MAIL
  1049. '
  1050. 12670 CALL GETNUMYN ("Do you want to notify callers of conference mail",X)
  1051.       IF NOT X THEN _
  1052.          CONFMAIL.LIST$ = NONE.PICKED$ : _
  1053.          RETURN
  1054.       GOSUB 17340
  1055.       GOSUB 17740
  1056.       CONFMAIL.LIST$ = HJ$
  1057.       RETURN
  1058. '
  1059. ' * PROCESS NAME OF UPLOAD DIRECTORY
  1060. '
  1061. 12730 CALL ASKRO("Name of upload directory (8 char. max)?",24,HJ$)
  1062.       IF LEN(HJ$) < 1 OR _
  1063.          LEN(HJ$) > 8 THEN _
  1064.          GOTO 12730
  1065.       CALL ALLCAPS (HJ$)
  1066.       UPLOAD.DIRECTORY$ = HJ$
  1067.       RETURN
  1068. '
  1069. ' * Get the File Management System Directory
  1070. '
  1071. 12740 CALL ASKRO("Name of File Management System (or NONE) directory (8 char. max)?",24,HJ$)
  1072.       IF LEN(HJ$) > 8 THEN _
  1073.          GOTO 12740
  1074.       CALL ALLCAPS (HJ$)
  1075.       FMS.DIRECTORY$ = HJ$
  1076.       IF FMS.DIRECTORY$ = "NONE" THEN _
  1077.          FMS.DIRECTORY$ = ""
  1078.       RETURN
  1079. 12750 CALL ASKRO("Name (prefix, optional extension) of Personal directory",24,HJ$)
  1080.       IF LEN(HJ$) < 1 OR _
  1081.          LEN(HJ$) > 12 OR INSTR(HJ$,".") > 9 THEN _
  1082.          GOTO 12750
  1083.       CALL ALLCAPS (HJ$)
  1084.       PERSONAL.DIR$ = HJ$
  1085.       IF INSTR(PERSONAL.DIR$,".") < 1 THEN _
  1086.          PERSONAL.DIR$ = PERSONAL.DIR$ + _
  1087.                          ".DEF"
  1088.       IF (INSTR(PERSONAL.DIR$,":") < 1) AND _
  1089.          (INSTR(PERSONAL.DIR$,"\") < 1) THEN _
  1090.          PERSONAL.DIR$ = PERSONAL.DRVPATH$+PERSONAL.DIR$
  1091.       RETURN
  1092. '
  1093. ' * GET THE SYSOP'S FIRST NAME
  1094. '
  1095. 12840 CALL ASKRO("What is the SYSOP's FIRST Name?",24,HJ$)
  1096.       IF LEN(HJ$) < 3 THEN _
  1097.          GOTO 12840
  1098.       CALL ALLCAPS (HJ$)
  1099.       SYSOP.FIRST.NAME$ = HJ$
  1100.       RETURN
  1101. 12850 CALL GETANSI (FG.1.DEF$," 1st")
  1102.       RETURN
  1103. 12860 CALL GETANSI (FG.2.DEF$," 2nd")
  1104.       RETURN
  1105. 12870 CALL GETANSI (FG.3.DEF$," 3rd")
  1106.       RETURN
  1107. 12880 CALL GETANSI (FG.4.DEF$," 4th")
  1108.       RETURN
  1109. 12890 CALL GETCOLOR("Caller's BACKGROUND color",CALLER.BKGRD)
  1110.       RETURN
  1111. '
  1112. ' * PROCESS THE SYSOP'S LAST NAME
  1113. '
  1114. 12910 CALL ASKRO("What is the SYSOP's LAST Name?",24,HJ$)
  1115.       IF LEN(HJ$) < 3 THEN _
  1116.          GOTO 12840
  1117.       CALL ALLCAPS (HJ$)
  1118.       SYSOP.LAST.NAME$ = HJ$
  1119.       RETURN
  1120. '
  1121. ' * PROCESS THE "PSEUDONYM" (FIRST NAME) USED BY THE SYSOP TO LOGON REMOTELY
  1122. '
  1123. 12980 CALL ASKRO("Secret first name that lets remote caller on as SYSOP is?",24,SYSOP.PASSWORD.1$)
  1124.       CALL ALLCAPS (SYSOP.PASSWORD.1$)
  1125.       IF SYSOP.PASSWORD.1$ = "" THEN _
  1126.          GOTO 12985
  1127.       MN1$ = SYSOP.PASSWORD.1$
  1128.       CALL ASKRO("Secret last name for remote SYSOP ([ENTER] disables)?",24,SYSOP.PASSWORD.2$)
  1129.       CALL ALLCAPS (SYSOP.PASSWORD.2$)
  1130.       IF SYSOP.PASSWORD.2$ = "" THEN _
  1131.          GOTO 12985
  1132.       MN2$ = SYSOP.PASSWORD.2$
  1133.       RETURN
  1134. 12985 MN1$ = "(Disabled)"
  1135.       MN2$ = ""
  1136.       RETURN
  1137. 12990 CALL GETNUMYN ("ESCAPE immediately lets on locally (NO=require name)",ESCAPE.INSECURE)
  1138.       RETURN
  1139. '
  1140. ' * IDENTIFY THE TYPE OF USERS THAT CAN BYPASS THE MESSAGE SUBSYSTEM
  1141. '
  1142. 13000 CALL ASKRO ("Mail to caller to report on logon: A)ll, N)ew only, S)kip (none)",24,HJ$)
  1143.       IF LEN(HJ$) < 1 THEN _
  1144.          GOTO 13000
  1145.       LOGON.MAIL.LEVEL$ = LEFT$(HJ$,1)
  1146.       CALL ALLCAPS (LOGON.MAIL.LEVEL$)
  1147.       IF INSTR("ANS",LOGON.MAIL.LEVEL$) = 0 THEN _
  1148.          GOTO 13000
  1149.       RETURN
  1150. 13010 CALL ASKRO ("Exclude lines from msg display that begin with",24,SCREEN.OUT.MSG$)
  1151.       RETURN
  1152. 13030 IF BYPASS = 0 THEN _
  1153.          BYPASS$ = "Any user" : _
  1154.          RETURN
  1155.       IF BYPASS = 1 THEN _
  1156.          BYPASS$ = "All but new users" : _
  1157.          RETURN
  1158.       IF BYPASS = 2 THEN _
  1159.          BYPASS$ = "Only EXPERT users" : _
  1160.          RETURN
  1161.       IF I = 0 THEN _
  1162.          CALL GETINIT ("Specify the security level required to bypass messages. ",24,-32767,32767,X,CR) : _
  1163.          X$=STR$(X)
  1164.       BYPASS$ = "Security >" + _
  1165.                 STR$(VAL(X$)) + _
  1166.                 " users"
  1167.       RETURN
  1168. '
  1169. ' * ALLOW THE SYSOP TO GIVE THIS RBBS-PC A PERSONAL NAME
  1170. '
  1171. 13131 CALL ASKRO("Enter name for this RBBS-PC (19 characters or less) ",24,HJ$)
  1172.       IF LEN(HJ$) > 19 THEN _
  1173.          GOTO 13131
  1174.       CALL ALLCAPS (HJ$)
  1175.       RBBS.NAME$ = HJ$
  1176.       RETURN
  1177. '
  1178. ' * ALLOW THE SYSOP TO SELECT "EXPERT" OR "NOVICE" AS HIS DEFAULT MODE
  1179. '
  1180. 13140 CALL ASKRO("SYSOP's default sign-on mode (E)xpert, N)ovice)? ",24,HJ$)
  1181.       IF LEN(HJ$) = 6 OR _
  1182.          LEN(HJ$) = 1 THEN _
  1183.          GOTO 13170
  1184.       GOTO 13140
  1185. 13170 CALL ALLCAPS (HJ$)
  1186.       IF HJ$ = "E" OR _
  1187.          HJ$ = "EXPERT" THEN _
  1188.          EXPERT.USER$ = "EXPERT" : _
  1189.          RETURN
  1190.       IF HJ$ = "N" OR _
  1191.          HJ$ = "NOVICE" THEN _
  1192.          EXPERT.USER$ = "NOVICE" : _
  1193.          RETURN
  1194.       GOTO 13140
  1195. 13180 CALL CHKPERSDIR (PERSONAL.DIR$,MAX.DESC.LEN,PERSONAL.LEN)
  1196.       RETURN
  1197. '
  1198. ' * ALLOW THE SYSOP TO SELECT HIS "OFFICE HOURS"
  1199. '
  1200. 13210 CALL GETINIT ("What is the earliest SYSOP wants to be paged? -- HHMM ",24,0,2359,START.OFFICE.HOURS,CR)
  1201.       IF CR THEN _
  1202.          GOTO 13210
  1203. 13216 CALL GETINIT ("What is the latest SYSOP wants to be paged? -- HHMM ",24,0,2359,END.OFFICE.HOURS,CR)
  1204.       IF CR THEN _
  1205.          GOTO 13216
  1206.       IF START.OFFICE.HOURS > END.OFFICE.HOURS THEN _
  1207.          SWAP START.OFFICE.HOURS,END.OFFICE.HOURS
  1208.       RETURN
  1209. '
  1210. ' * DETERMINE IF THE PRINTER'S "BELL" IS TO BE USED WHEN PAGING
  1211. '
  1212. 13224 CALL GETYESNO ("Use on-line printer's bell to the page SYSOP?",M11$)
  1213.       RETURN
  1214. '
  1215. ' * DETERMINE THE NUMBER OF RINGS RBBS-PC IS TO WAIT BEFORE ANSWERING
  1216. '
  1217. 13228 A$ = ""
  1218.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "1Q0X1"
  1219. 13229 CALL GETINIT ("How many rings should RBBS-PC wait before answering? ",24,0,255,REQUIRED.RINGS,CR)
  1220.       IF CR THEN _
  1221.          GOTO 13229
  1222.       IF REQUIRED.RINGS = 0 THEN _
  1223.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "1Q0X1" : _
  1224.          RETURN
  1225. 13233 CALL GETNUMYN ("Next call answered after" + _
  1226.              STR$(REQUIRED.RINGS) + _
  1227.              " rings. Do you want ringback?",AB)
  1228.       IF NOT AB THEN _
  1229.          GOTO 13237
  1230. 13235 IF REQUIRED.RINGS > 5 THEN _
  1231.          A$ = "(<6 for ringback)" : _
  1232.          GOTO 13229
  1233.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "255  "
  1234.       RETURN
  1235. 13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "254  "
  1236.       RETURN
  1237. 13238 CALL MMINTEGER ("Minimum baud required for NEW callers",0,32000,MIN.NEWCALLER.BAUD)
  1238.       RETURN
  1239. 13242 CALL MMINTEGER ("Minimum baud required for OLD callers",0,32000,MIN.OLDCALLER.BAUD)
  1240.       RETURN
  1241. 13249 CALL GETNUMYN ("Should RBBS-PC go off-line when DISK FULL occurs ",DISKFULL.GO.OFFLINE)
  1242.       RETURN
  1243. '
  1244. ' * REQUEST DRIVE SPECIFICATION IN THE RANGE "A" TO THE MAXIMUM ALLOWABLE
  1245. '
  1246. 13253 CALL ASKRO ("Specify single drive in the range A->" + _
  1247.             M$ + _
  1248.             " for "+A$,24,HJ$)
  1249.       IF LEN(HJ$) <> 1 THEN _
  1250.          GOTO 13253
  1251.       CALL ALLCAPS (HJ$)
  1252.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1253.          GOTO 13253
  1254.       RETURN
  1255. '
  1256. ' * ALLOW THE SYSOP TO ELECT TO USE RTS FOR MODEM FLOW CONTROL
  1257. '
  1258. 13260 CALL GETYESNO ("Does your modem use the CTS signal for flow control",RTS$)
  1259.       RETURN
  1260. 13270 CALL MMINTEGER ("Seconds to wait for carrier after detecting a call",5,999,MAX.CARRIER.WAIT)
  1261.       RETURN
  1262. 13280 CALL MMINTEGER ("Wait how many minutes before recycling if no calls (0=forever)",0,32400,RECYCLE.WAIT)
  1263.       RETURN
  1264. 13285 CALL ASKRO ("What caller types is ECHOed by R)BBS, I)nter host, C)aller's pgm",24,DEFAULT.ECHOER$)
  1265.       IF LEN(DEFAULT.ECHOER$) < 1 THEN _
  1266.          GOTO 13285
  1267.       DEFAULT.ECHOER$ = LEFT$(DEFAULT.ECHOER$,1)
  1268.       CALL ALLCAPS (DEFAULT.ECHOER$)
  1269.       IF INSTR("ICR",DEFAULT.ECHOER$) < 1 THEN _
  1270.          GOTO 13285
  1271.       RETURN
  1272. 13290 A$ = "Leave modem at init baud rate Y)es, N)o, H)igh (above 2400)" ' WM042201
  1273.       CALL ASKRO (A$,24,HJ$)                                         ' WM042201
  1274.       IF LEN(HJ$) <> 1 THEN _                                        ' WM042201
  1275.          GOTO 13290                                                  ' WM042201
  1276.       CALL ALLCAPS (HJ$)                                             ' WM042201
  1277.       IF HJ$ = "Y" THEN _                                            ' WM042201
  1278.          KEEP.INIT.BAUD = -1 _                                       ' WM042201
  1279.       ELSE IF HJ$ = "N" THEN _                                       ' WM042201
  1280.          KEEP.INIT.BAUD = 0 _                                        ' WM042201
  1281.       ELSE IF HJ$ = "H" THEN _                                       ' WM042201
  1282.          KEEP.INIT.BAUD = 1 _                                        ' WM042201
  1283.       ELSE _                                                         ' WM042201
  1284.          GOTO 13290                                                  ' WM042201
  1285.       RETURN
  1286. 13295 CALL GETNUMYN ("Switch back comm settings if changed for up/down load",SWITCH.BACK)
  1287.       RETURN
  1288. 13310 CALL GETNUMYN ("Always respect XON/XOFF for flow control",XON.XOFF)
  1289.       RETURN
  1290. 13320 CALL GETNUMYN ("CONFIG.SYS includes an ANSI device driver",DOSANSI)
  1291.       RETURN
  1292. 13330 CALL MMINTEGER ("ASCII value for SMART TEXT control (0=NONE)",0,255,SMART.TEXT)
  1293.       RETURN
  1294. '
  1295. ' * ALLOW THE DRIVES AVAILABLE FOR DOWNLOADING TO BE SELECTED
  1296. '
  1297. 13470 CALL ASKRO ("Specify download drives (max of" + _
  1298.             STR$(MAXD) + _
  1299.             " in the range A-> " + M$ + "). ",24,HJ$)
  1300.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAXD THEN _
  1301.          GOTO 13470
  1302.       CALL ALLCAPS (HJ$)
  1303.       FOR I = 1 TO LEN(HJ$)
  1304.          A$(I) = MID$(HJ$,I,1)
  1305.       NEXT
  1306.       FOR I = 1 TO LEN(HJ$)
  1307.          IF A$(I) < "A" OR A$(I) > M$ THEN _
  1308.             GOTO 13470
  1309.       NEXT
  1310.       DRIVES.FOR.DOWNLOADS$ = HJ$
  1311.       IF DNLD.SUB < 1 THEN _
  1312.          RETURN
  1313.       FOR I = 1 TO DNLD.SUB
  1314.          IF INSTR(1,DRIVES.FOR.DOWNLOADS$,LEFT$(DNLD$(I),1)) = 0 THEN _
  1315.             DNLD$(I) = ""
  1316.       NEXT
  1317.       STOPIT = DNLD.SUB
  1318.       FOR I = 1 TO STOPIT
  1319.          IF DNLD$(I) <> "" THEN _
  1320.             GOTO 13583
  1321.          DNLD$(I) = DNLD$(I + 1)
  1322.          DNLD$(I + 1) = ""
  1323. 13583 NEXT
  1324.       DNLD.SUB = 0
  1325.       FOR I = 1 TO STOPIT
  1326.          IF DNLD$(I) <> "" THEN _
  1327.             DNLD.SUB = DNLD.SUB + 1
  1328.       NEXT
  1329.       RETURN
  1330. 13593 MAX = 3
  1331. 13599 CALL ASKRO (A$,24,HJ$)
  1332.       CALL ALLCAPS (HJ$)
  1333.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAX THEN _
  1334.          GOTO 13599
  1335.       I = 0
  1336.       GOSUB 25920
  1337.       IF I = 0 THEN _
  1338.          RETURN
  1339.       GOTO 13599
  1340. '
  1341. ' * IS THE DEFAULT TO HAVE THE PROMPT BELL ON AFTER EACH COMMAND?
  1342. '
  1343. 13750 CALL ASKRO ("Prompt bell default? (ON or OFF) ",24,PROMPT.BELL$)
  1344.       IF LEN(PROMPT.BELL$) < 1 OR _
  1345.          LEN(PROMPT.BELL$) > 3 THEN _
  1346.          GOTO 13750
  1347.       CALL ALLCAPS (PROMPT.BELL$)
  1348.       IF PROMPT.BELL$ = "ON"  THEN _
  1349.          RETURN
  1350.       IF PROMPT.BELL$ = "OFF" THEN _
  1351.          RETURN
  1352.       GOTO 13750
  1353. '
  1354. ' * SPECIFY THE MAXIMUM TIME A USER CAN STAY ON (THE DEFAULT)
  1355. '
  1356. 13840 CALL GETINIT ("Maximum minutes per session a user can stay on the system ",24,0,1440,MIN,CR)
  1357.       IF CR THEN _
  1358.          GOTO 13840
  1359.       MINUTES.PER.SESSION! = MIN
  1360.       RETURN
  1361. '
  1362. ' * ALLOW THE MAXIMUM NUMBER OF MESSAGES ALLOWED TO BE SELECTED
  1363. '
  1364. 13890 J = 999
  1365.       IF NOT MESSAGES.CAN.GROW THEN _
  1366.          IF ((MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIUM.NUMBER.OF.NODES) / 5) < J THEN _
  1367.             J = (MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIMUM.NUMBER.OF.NODES) / 5
  1368.       CALL GETINIT ("Set maximum number of messages allowed (MAX = " + _
  1369.             STR$(FIX(J)) + _
  1370.             ")",24,1,999,MAX.ALLOWED.MSGS.FRM.DEF,CR)
  1371.       IF CR THEN _
  1372.          GOTO 13890
  1373.       IF MAX.ALLOWED.MSGS.FRM.DEF < J + 1 THEN _
  1374.          GOTO 13929
  1375.       IF MESSAGES.CAN.GROW THEN _
  1376.          GOTO 13929
  1377.       CALL GETNUMYN ("Increase the " + _
  1378.                       MAIN.MESSAGE.FILE$ + _
  1379.                      " file to " + _
  1380.                        STR$((MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES) + _
  1381.                      " records?",AB)
  1382.       IF NOT AB THEN _
  1383.          GOTO 13890
  1384. 13927 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1385.       GOSUB 30450
  1386.       B3! = (MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES
  1387.       GOSUB 22080
  1388.       RETURN
  1389. 13929 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1390.       GOSUB 30450
  1391.       RETURN
  1392. 13940 CALL ANYINTEGER ("Set number of months before an inactive user is purged. ",ACT.MNTHS.B4.DELETING)
  1393.       IF ACT.MNTHS.B4.DELETING < 1 OR ACT.MNTHS.B4.DELETING > 12 THEN _
  1394.          GOTO 13940
  1395.       RETURN
  1396. 14120 COMMIN = 1
  1397.       COMMAX = 8
  1398.       CALL ANYINTEGER ("# of communication port to use (" + _
  1399.                    MID$(STR$(COMMIN),2) + _
  1400.                   "-" + _
  1401.                   MID$(STR$(COMMAX),2) + _
  1402.                   ", or 0 for LOCAL WORKSTATION)? ",X)
  1403.       IF X <> 0 AND (X < COMMIN OR X > COMMAX) THEN _
  1404.          GOTO 14120
  1405.       COM.PORT$ = "COM" + MID$(STR$(X),2)
  1406.       IF X = 0 THEN _
  1407.          LSB = 1016 : _
  1408.          RETURN
  1409. 14121 CALL GETNUMYN ("Use FOSSIL driver support",FOSSIL)
  1410.       IF FOSSIL THEN _
  1411.          GOTO 14125
  1412.       IF X < 3 THEN _
  1413.          GOTO 14123
  1414.       CALL GETNUMYN("BASIC does not support " + COM.PORT$ + ".  Do you wish to change it?",AB)
  1415.       IF AB THEN _
  1416.          GOTO 14120
  1417.       GOTO 14121
  1418. 14123 IF X = 1 THEN _
  1419.          LSB = 1016 _
  1420.       ELSE IF X = 2 THEN _
  1421.               LSB = 760
  1422.       IF PCJR THEN _
  1423.          LSB = 760
  1424.       RETURN
  1425. 14125 CALL ASKRO("Enter port address. i.e. 3F8? ",24,HJ$)
  1426.       IF LEN(HJ$) <> 3 THEN _
  1427.          GOTO 14125
  1428. 14130 CALL ALLCAPS (HJ$)
  1429.       B = 3
  1430.       GOSUB 14789
  1431.       IF A < 0 THEN _
  1432.          GOTO 14125
  1433.       LSB = A
  1434.       B = 2
  1435.       GOSUB 14789
  1436.       IF A < 0 THEN _
  1437.          GOTO 14125
  1438.       LSB = LSB + A * 16
  1439.       B = 1
  1440.       GOSUB 14789
  1441.       IF A < 0 THEN _
  1442.          GOTO 14125
  1443.       LSB = LSB + A * 256
  1444.       RETURN
  1445. 14789 A = INSTR("0123456789ABCDEF",MID$(HJ$,B,1)) - 1
  1446.       RETURN
  1447. '
  1448. ' *  DRIVE AND NAME OF FILE CONTAINING THE BULLETIN FILES
  1449. '
  1450. 14790 GOSUB 15200
  1451.       DRIVE.FOR.BULLETINS$ = HJ$
  1452.       GOSUB 14970
  1453.       BULLETIN.MENU$ = HJ$
  1454.       RETURN
  1455. '
  1456. ' *  PREFIX USED TO NAME BULLETIN FILES
  1457. '
  1458. 14800 GOSUB 14970
  1459.       IF LEN(HJ$) > 6 THEN _
  1460.          RETURN
  1461.       BULLETIN.PREFIX$ = HJ$
  1462.       RETURN
  1463. '
  1464. ' *  DRIVE AND PATH FOR THREE MAJOR 'HELP' FILES
  1465. '
  1466. 14810 GOSUB 15200
  1467.       HELP.PATH$ = HJ$
  1468.       RETURN
  1469. 14815 GOSUB 15200
  1470.       QUES.PATH$ = HJ$
  1471.       RETURN
  1472. '
  1473. ' *  PREFIX FOR FOR THREE MAJOR 'HELP' FILES
  1474. '
  1475. 14820 GOSUB 14970
  1476.       IF LEN(HJ$) > 7 THEN _
  1477.          RETURN
  1478.       HELP.FILE.PREFIX$ = HJ$
  1479.       RETURN
  1480. '
  1481. ' *  NAME OF 'NEWUSER' FILE
  1482. '
  1483. 14825 A$ = "File extension for help files (max 3 chars)"
  1484.       GOSUB 13593
  1485.       HELP.EXTENSION$ = HJ$
  1486.       RETURN
  1487. 14830 GOSUB 17340
  1488.       NEWUSER.FILE$ = HJ$
  1489.       RETURN
  1490. '
  1491. ' *  NAME OF 'WELCOME' FILE
  1492. '
  1493. 14840 GOSUB 17340
  1494.       WELCOME.FILE$ = HJ$
  1495.       RETURN
  1496. 14845 CALL ASKRO ("Extension for compressed files",24,HJ$)           ' KG052301
  1497.       IF LEN(HJ$) > 3 OR LEN(HJ$) < 1 THEN _
  1498.          GOTO 14845
  1499.       CALL ALLCAPS (HJ$)
  1500.       DEFAULT.EXTENSION$ = HJ$
  1501.       RETURN
  1502. '
  1503. ' *  NAME OF 'FILE DIRECTORY' FILE'S EXTENSION
  1504. '
  1505. 14850 A$ = "Extension for RBBS directory files (3 char. max)."
  1506.       GOSUB 13593
  1507.       DIRECTORY.EXTENTION$ = HJ$
  1508.       RETURN
  1509. 14855 CALL ASKRO ("Alternate extension for RBBS directory files ",24,HJ$)
  1510.       IF LEN(HJ$) > 3 THEN _
  1511.          GOTO 14855
  1512.       CALL ALLCAPS (HJ$)
  1513.       ALTDIR.EXTENSION$ = HJ$
  1514.       RETURN
  1515. 14857 A$ = "PREFIX of name of directory of directories "
  1516.       MAX = 8
  1517.       GOSUB 13599
  1518.       DIRECTORY.PREFIX$ = HJ$
  1519.       RETURN
  1520. '
  1521. ' *  NAME OF THE SYSOP'S MENU
  1522. '
  1523. 14860 GOSUB 17340
  1524.       MENU$(1) = HJ$
  1525.       RETURN
  1526. '
  1527. ' *  NAME OF MAIN MESSAGES SUBSECTION'S MENU
  1528. '
  1529. 14870 GOSUB 17340
  1530.       MENU$(2) = HJ$
  1531.       RETURN
  1532. '
  1533. ' *  NAME OF FILE SUBSECTION'S MENU
  1534. '
  1535. 14880 GOSUB 17340
  1536.       MENU$(3) = HJ$
  1537.       RETURN
  1538. '
  1539. ' *  NAME OF UTILITIES SUBSECTION'S MENU
  1540. '
  1541. 14890 GOSUB 17340
  1542.       MENU$(4) = HJ$
  1543.       RETURN
  1544. '
  1545. ' *  NAME OF MENU LISTING THE CONFERENCES THAT ARE AVAILABLE
  1546. '
  1547. 14900 GOSUB 17340
  1548.       CONFERENCE.MENU$ = HJ$
  1549.       RETURN
  1550. '
  1551. ' *  GET ANSWER MENU
  1552. '
  1553. 14905 GOSUB 17340
  1554.       ANS.MENU$ = HJ$
  1555.       RETURN
  1556. '
  1557. ' *  NAME OF FILE CONTAINING UNACCEPTABLE USER NAMES
  1558. '
  1559. 14910 GOSUB 17340
  1560.       TRASHCAN.FILE$ = HJ$
  1561.       RETURN
  1562. 14915 CALL ASKRO ("Help for uploader to categorize is",24,UPCAT.HELP$)
  1563.       IF LEN(UPCAT.HELP$) > 7 THEN 14915
  1564.       CALL ALLCAPS (UPCAT.HELP$)
  1565.       RETURN
  1566. '
  1567. ' *  DRIVE AVAILABLE FOR UPLOADING
  1568. '
  1569. 14920 A$ = "uploading "
  1570.       GOSUB 13253
  1571.       DRIVE.FOR.UPLOADS$ = HJ$
  1572.       IF LEN(UPLOAD.SUBDIR$) > 1 THEN _
  1573.          MID$(UPLOAD.SUBDIR$,1,1) = DRIVE.FOR.UPLOADS$
  1574.       RETURN
  1575. '
  1576. ' * GENERALIZED ROUTINE TO SELECT FILE NAME FOR ANY OPTION WITHIN CONFIG
  1577. '
  1578. 14970 X$ = OPTION$
  1579. 14980 CALL ASKRO ("Specify name of the file for parameter " + X$ + ".",24,HJ$)
  1580.       CALL ALLCAPS (HJ$)
  1581.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
  1582.          GOTO 14980
  1583.       L1 = INSTR(HJ$,".")
  1584.       IF L1 = 0 THEN _
  1585.          IF LEN(HJ$) < 9 THEN _
  1586.             GOTO 15045 ELSE _
  1587.       GOTO 14980
  1588.       IF L1 > 9 THEN _
  1589.          GOTO 14980
  1590.       IF L1 < 2 THEN _
  1591.          GOTO 14980
  1592.       IF LEN(HJ$) - L1 > 3 THEN _
  1593.          GOTO 14980
  1594. 15045 I = 0
  1595.       GOSUB 25920
  1596.       IF I = 0 THEN _
  1597.          RETURN
  1598.       GOTO 14980
  1599. '
  1600. ' * GENERALIZED ROUTINE TO SPECIFY A DISK DRIVE FOR ANY OPTION WITHIN CONFIG
  1601. '
  1602. 15170 CALL ASKRO ("Specify drive in the range A->" + _
  1603.                    M$ + _
  1604.                   " for parameter " + _
  1605.                    X$ + _
  1606.                   ". ",24,HJ$)
  1607.       IF LEN(HJ$) <> 1 THEN _
  1608.          GOTO 15170
  1609.       CALL ALLCAPS (HJ$)
  1610.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1611.          GOTO 15170
  1612.       TB$ = HJ$
  1613.       RETURN
  1614. '
  1615. ' *  GENERALIZED ROUTINE FOR SPECIFYING DRIVE/PATH
  1616. '
  1617. 15200 X$ = "parameter " + OPTION$
  1618. 15205 CALL ASKRO ("Specify drive/path (A->" + M$ + ") for " + X$ + ".",24,HJ$)
  1619.       IF LEN(HJ$) < 1 THEN _
  1620.          GOTO 15205
  1621.       CALL ALLCAPS (HJ$)
  1622.       IF LEN(HJ$) = 1 THEN _
  1623.          HJ$ = HJ$ + ":"
  1624.       IF MID$(HJ$,2,1) = ":" THEN _
  1625.         IF LEFT$(HJ$,1) < "A" OR LEFT$(HJ$,1) > M$ THEN _
  1626.            GOTO 15205
  1627.       IF LEN(HJ$) > 2 THEN _
  1628.          IF MID$(HJ$,3,1) <> "\" THEN _
  1629.             GOTO 15205
  1630.       IF INSTR(HJ$,"\") > 0 THEN _
  1631.         IF RIGHT$(HJ$,1) <> "\" THEN _
  1632.            HJ$ = HJ$ + "\"
  1633.       STRNG$ = HJ$
  1634.       GOSUB 60470
  1635.       IF NOT IS.OK THEN _
  1636.          GOTO 15205
  1637.       TB$ = HJ$
  1638.       RETURN
  1639. 15230 RETURN
  1640. 15234 CALL ANYNUMBER ("Extend by what fraction of time uploading ",UPLOAD.TIME.FACTOR!)
  1641.       IF UPLOAD.TIME.FACTOR! <= 1.0 THEN _
  1642.          RETURN
  1643.       CLS
  1644.       LOCATE 10,1
  1645.       PRINT "     An upload time credit factor > 1 means that uploaders may get more"
  1646.       PRINT "     time credited than their total session time.   Such a credit normally"
  1647.       PRINT "     survives only for the day on which the upload is made."
  1648.       CALL GETNUMYN ("Make upload time credits survive forever until used",KEEP.TIME.CREDITS)
  1649.       RETURN
  1650. 15240 CALL MMINTEGER ("How many seconds of delay after modem initilization (1 to 99)?",1,99,MODEM.INIT.WAIT.TIME)
  1651.       RETURN
  1652. 15250 CALL MMINTEGER ("# seconds to delay prior to issuing modem commands (0 to 99)?",1,99,MODEM.COMMAND.DELAY.TIME)
  1653.       RETURN
  1654. 15290 CALL MMINTEGER ("Enter number of active 'bulletins' (0 to 99)",0,99,ACTIVE.BULLETINS)
  1655.       RETURN
  1656. 15310 CALL ANYINTEGER ("Min security to read new PRIVATE messages",PRIVATE.READ.SEC)
  1657.       RETURN
  1658. 15320 CALL ANYINTEGER ("Min security to read new PUBLIC messages",PUBLIC.READ.SEC)
  1659.       RETURN
  1660. 15330 CALL ANYINTEGER ("Min security to change msg read security",SEC.CHANGE.MSG)
  1661.       RETURN
  1662. '
  1663. ' * DETERMINE THE NAME OF THE "MESSAGES" FILE
  1664. '
  1665. 15460 GOSUB 17340
  1666.       MAIN.MESSAGE.FILE$ = HJ$
  1667.       MAIN.MESSAGE.BACKUP$ = MAIN.MESSAGE.FILE$ + ".BAK"
  1668.       MAINMSG$ = MAIN.MESSAGE.FILE$
  1669.       RETURN
  1670. '
  1671. ' * DETERMINE THE NAME OF THE "CALLERS" FILE
  1672. '
  1673. 15461 GOSUB 15200
  1674.       CALL GETNUMYN ("Do you want a caller's activity to be logged to a file",X)
  1675.       IF NOT X THEN _
  1676.          CALLERS.FILE$ = TB$ : _
  1677.          RETURN
  1678.       GOSUB 14970
  1679.       CALLERS.FILE$ = TB$ + HJ$
  1680.       RETURN
  1681. '
  1682. ' * DETERMINE THE NAME OF THE "COMMENTS" FILE
  1683. '
  1684. 15464 GOSUB 17340
  1685.       COMMENTS.FILE$ = HJ$
  1686.       RETURN
  1687. '
  1688. ' * DETERMINE THE NAME OF THE "USERS" FILE
  1689. '
  1690. 15500 GOSUB 17340
  1691.       MAIN.USER.FILE$ = HJ$
  1692.       MAINUSR$ = MAIN.USER.FILE$
  1693.       RETURN
  1694. 15530 CALL GETCOLOR ("Foreground",FG)
  1695.       CALL ASKRO ("Make foreground [N]ormal, or I)ntense (bright)",24,ANS$)
  1696.       CALL ALLCAPS (ANS$)
  1697.       IF LEFT$(ANS$,1) = "I" THEN _
  1698.          FG = FG + 8
  1699.       RETURN
  1700. 15590 CALL GETCOLOR ("Background",BG)
  1701.       RETURN
  1702. 15650 CALL GETCOLOR ("Border",BORDER)
  1703.       RETURN
  1704.  
  1705. '
  1706. ' * SHOULD RBBS-PC'S DEFAULT HAYES COMMANDS BE USED?
  1707. '
  1708. 15710 CLS
  1709.       GOSUB 15780
  1710.       A$ = "RBBS-PC to use modem commands you specified as follows:"
  1711.       IF M14$ = "YES" THEN _
  1712.          A$ ="RBBS-PC to use standard modem commands as follows:"
  1713.       PRINT A$
  1714.       PRINT ""
  1715.       PRINT "1. Reset the modem                : " + USER.RESET.COMMAND$
  1716.       PRINT ""
  1717.       PRINT "2. Initialize the modem           : " + USER.INIT.COMMAND$
  1718.       PRINT "   Note: End item 2 with:"
  1719.       PRINT "     S0=1Q0X1 if answer on 0 rings"
  1720.       PRINT "     S0=254 if answer on >0 rings (no ring-back)"
  1721.       PRINT "     S0=255 if answer on >0 rings (with ring-back)"
  1722.       PRINT ""
  1723.       PRINT "3. Count the number of rings      : " + USER.COUNT.RINGS.COMMAND$
  1724.       PRINT ""
  1725.       PRINT "4. Answer the phone               : " + USER.ANSWER.COMMAND$
  1726.       PRINT ""
  1727.       PRINT "5. Take the phone off the hook    : " + USER.GO.OFFHOOK.COMMAND$
  1728.       PRINT ""
  1729.       PRINT "6. Clear the modem's firmware     : " + USER.FIRMWARE.CLEAR.CMND$
  1730.       PRINT ""
  1731.       PRINT "7. Initialize modem's firmware    : " + USER.INITIALIZE.COMMAND$
  1732.       PRINT "   Note: End item 7 with:"
  1733.       PRINT "     Q1 if item 2 ends with S0=255"
  1734.       PRINT ""
  1735.       PRINT "8. Write to modem's firmware      : " + USER.FIRMWARE.WRITE.CMND$
  1736.       CALL GETINIT ("Specify command to change (1 to 8), CR to end, or 0 to reset to defaults)",24,0,8,I,CR)
  1737.       IF CR THEN _
  1738.          RETURN
  1739.       IF I <> 0 THEN _
  1740.          GOTO 15711
  1741.       GOSUB 15790
  1742.       GOTO 15710
  1743. 15711 CALL ASKRO ("Enter modem command for item" + _
  1744.                    STR$(I) + _
  1745.                   " :",24,HJ$)
  1746.       CALL ALLCAPS (HJ$)
  1747.       ON I GOTO 15712,15714,15716,15718,15720,15722,15724,15726
  1748. 15712 USER.RESET.COMMAND$ = HJ$
  1749.       GOTO 15710
  1750. 15714 USER.INIT.COMMAND$ = HJ$
  1751.       GOTO 15710
  1752. 15716 USER.COUNT.RINGS.COMMAND$ = HJ$
  1753.       GOTO 15710
  1754. 15718 USER.ANSWER.COMMAND$ = HJ$
  1755.       GOTO 15710
  1756. 15720 USER.GO.OFFHOOK.COMMAND$ = HJ$
  1757.       GOTO 15710
  1758. 15722 USER.FIRMWARE.CLEAR.CMND$ = HJ$
  1759.       GOTO 15710
  1760. 15724 USER.INITIALIZE.COMMAND$ = HJ$
  1761.       GOTO 15710
  1762. 15726 USER.FIRMWARE.WRITE.CMND$ = HJ$
  1763.       GOTO 15710
  1764. 15780 M14$ = "NO"
  1765.       IF MODEM.ANSWER.COMMAND$ = USER.ANSWER.COMMAND$ AND _
  1766.          MODEM.COUNT.RINGS.COMMAND$ = USER.COUNT.RINGS.COMMAND$ AND _
  1767.          MODEM.GO.OFFHOOK.COMMAND$ = USER.GO.OFFHOOK.COMMAND$ AND _
  1768.          MID$(MODEM.INIT.COMMAND$,1,INSTR(MODEM.INIT.COMMAND$,"S0=") - 1) = MID$(USER.INIT.COMMAND$,1,INSTR(USER.INIT.COMMAND$,"S0=") - 1)  AND _
  1769.          MODEM.RESET.COMMAND$ = USER.RESET.COMMAND$ AND _
  1770.          FIRMWARE.INITIALIZE.COMMAND$ = USER.INITIALIZE.COMMAND$ AND _
  1771.          FIRMWARE.CLEAR.COMMAND$ = USER.FIRMWARE.CLEAR.CMND$ AND _
  1772.          FIRMWARE.WRITE.COMMAND$ = USER.FIRMWARE.WRITE.CMND$ THEN _
  1773.          M14$ = "YES"
  1774.       RETURN
  1775. 15790 FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5"
  1776.       FIRMWARE.CLEAR.COMMAND$ = "AT&F"
  1777.       FIRMWARE.WRITE.COMMAND$ = "&W"
  1778.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$
  1779.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$
  1780.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$
  1781.       USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$
  1782.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$
  1783.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$
  1784.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$
  1785.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$
  1786.       RETURN
  1787. 15800 CALL GETNUMYN ("Remind users of the messages they left?",MESSAGE.REMINDER)
  1788.       RETURN
  1789. 15820 CALL GETNUMYN ("Use machine language routines for speed",TURBO.RBBS)
  1790.       RETURN
  1791. 15825 CALL GETNUMYN ("Not BASIC = use DOS calls (need for local color graphics)",USE.BASIC.WRITES)
  1792.       RETURN
  1793. 15830 CALL GETNUMYN ("Look no further when command not found in current section",RESTRICT.VALID.CMDS)
  1794.       RETURN
  1795. 15835 CALL GETNUMYN ("YES means to stop rather than scroll away previous text",MENUS.CAN.PAUSE)
  1796.       RETURN
  1797. 15840 CALL GETNUMYN ("Are system bulletins to be optional?",BULLETINS.OPTIONAL)
  1798.       RETURN
  1799. 15850 GOSUB 15200
  1800.       MACRO.DRVPATH$ = HJ$
  1801.       RETURN
  1802. 15860 A$ = "File extension for macro files (max 3 chars)"
  1803.       GOSUB 13593
  1804.       MACRO.EXTENSION$ = HJ$
  1805.       RETURN
  1806. 15880 CALL GETNUMYN ("Is non-ascii protocol required for binary files?",REQUIRE.NON.ASCII)
  1807.       RETURN
  1808. 15911 CALL GETNUMYN("Enable MICROCOM's MNP protocol?",MNP.SUPPORT)
  1809.       RETURN
  1810. 15920 CALL GETYESNO ("Is " + _
  1811.                       DIRECTORY.EXTENTION$ + _
  1812.                       " omitted from the N)ew command?",OMIT.MAIN.DIRECTORY$)
  1813.       RETURN
  1814. 15991 CALL GETNUMYN ("Do you want EXTENDED logging to the 'callers' file",EXTENDED.LOGGING)
  1815.       RETURN
  1816. 15993 CALL GETNUMYN ("Do you want 'comments' recorded as private messages",COMMENTS.AS.MESSAGES)
  1817.       RETURN
  1818. 16000 CALL GETNUMYN ("Is system 'welcome' interruptable",WELCOME.INTERRUPTABLE)
  1819.       RETURN
  1820. 16031 CALL MMINTEGER ("Seconds users can be idle before being logged off",1,32400,WAIT.BEFORE.DISCONNECT)
  1821.       RETURN
  1822. 16032 CALL MMINTEGER ("Size of stack space to be set aside",1,32767,SIZE.OF.STACK)
  1823.       RETURN
  1824. 16033 CALL MMINTEGER ("Security level exempt from 'epi-log'",1,32767,SECURITY.EXEMPT.FROM.EPILOG)
  1825.       RETURN
  1826. '
  1827. ' * IDENTIFY THE TYPE OF PC THAT RBBS-PC WILL BE RUNNING ON
  1828. '
  1829. 16040 CLS
  1830.       LOCATE 5,5
  1831.       PRINT "Please select the type of PC which RBBS-PC will be running on  :"
  1832.       LOCATE 7,10
  1833.       PRINT "0.   IBM PC, IBM XT, or IBM AT"
  1834.       LOCATE 9,10
  1835.       PRINT "1.   Compaq/Plus or compatable that uses interrupt 7F"
  1836.       LOCATE 11,10
  1837.       PRINT "2.   IBM PCjr
  1838.       LOCATE 13,10
  1839.       PRINT "3.   Other compatable under IBM's DOS (i.e. PC-DOS)
  1840. 16050 CALL GETINIT ("Select environment (0 to 3, CR to end)",24,0,3,COMPUTER.TYPE,CR)
  1841.       IF CR THEN _
  1842.          RETURN
  1843. 16062 ON COMPUTER.TYPE+1 GOTO 16063,16064,16065,16066
  1844. 16063 COMPUTER.TYPE$ = "IBM PC, XT, or AT"
  1845.       RETURN
  1846. 16064 COMPUTER.TYPE$ = "Compaq/Plus"
  1847.       RETURN
  1848. 16065 COMPUTER.TYPE$ = "PCjr"
  1849.       GOTO 16071
  1850. 16066 COMPUTER.TYPE$ = "Other under PC-DOS"
  1851.       RETURN
  1852. 16071 CALL GETNUMYN ("Is an IBM PCjr Internal Modem installed? (YES or NO)",PCJR)
  1853.       IF PCJR THEN _
  1854.          LSB = 760
  1855. 16073 RETURN
  1856. 16121 CALL GETNUMYN ("Wait to issue modem commands between rings?",COMMANDS.BETWEEN.RINGS)
  1857.       RETURN
  1858. 16124 CALL MMINTEGER ("Enter baud rate (300,1200,2400,4800,9600,19200) to open modem at ",300,19200,B1)
  1859.       IF B1 = 300 OR B1 = 1200 OR B1 = 2400 OR B1 = 4800 OR B1 = 9600 OR _
  1860.          B1 = 19200 THEN _
  1861.             GOTO 16128 _
  1862.       ELSE GOTO 16124
  1863. 16128 MODEM.INIT.BAUD$ = MID$(STR$(B1),2)
  1864.       RETURN
  1865. '
  1866. ' *  NAME OF MENU CONTAINING THE LIST OF AVAILABLE 'DOORS'
  1867. '
  1868. 16130 GOSUB 17340
  1869.       MENU$(5) = HJ$
  1870.       RETURN
  1871. '
  1872. ' * NAME OF THE FILE BUILT DYNAMICALLY BY RBBS-PC TO EXIT TO A 'DOOR'
  1873. '
  1874. 16140 GOSUB 17340
  1875.       RCTTY.BAT$ = HJ$
  1876.       RETURN
  1877. '
  1878. ' * NAME OF FILE TO RE-INVOKE RBBS-PC WHEN RETURNING FROM A 'DOOR'
  1879. '
  1880. 16150 GOSUB 17340
  1881.       RBBS.BAT$ = HJ$
  1882.       RETURN
  1883. '
  1884. ' * DRIVE/PATH TO LOOK FOR 'COMMAND.COM' ON
  1885. '
  1886. 16160 GOSUB 15200
  1887.       DISK.FOR.DOS$ = HJ$
  1888.       RETURN
  1889. 16170 CALL GETNUMYN ("Redirect I/O via the CTTY command on dropping to DOS?",REDIRECT.IO.METHOD)
  1890. 16175 CALL GETNUMYN ("Redirect I/O via a device named in CONFIG.SYS?",B1)
  1891.       IF B1 THEN _
  1892.          GOTO 16176
  1893.       USE.DEVICE.DRIVER$ = ""
  1894.       RETURN
  1895. 16176 IF LEN (USE.DEVICE.DRIVER$) > 0 THEN _
  1896.          GOTO 16177
  1897.       CALL ASKRO("Enter name of the device to use. ",24,USE.DEVICE.DRIVER$)
  1898.       IF LEN (USE.DEVICE.DRIVER$) > 8 THEN _
  1899.          GOTO 16176
  1900.       IF LEN (USE.DEVICE.DRIVER$) = 0 THEN _
  1901.          RETURN
  1902. 16177 CALL GETNUMYN ("Use the device named " + USE.DEVICE.DRIVER$ + "?",B1)
  1903.       IF B1 THEN _
  1904.          RETURN
  1905.       USE.DEVICE.DRIVER$ = ""
  1906.       GOTO 16176
  1907. 16290 CALL GETNUMYN ("Is the 'door' subsystem available?",DOORS.AVAILABLE)
  1908.       IF NOT DOORS.AVAILABLE THEN _
  1909.          RETURN
  1910.       CALL GETNUMYN ("Will you be running RBBS-PC under MultiLink? ",AB)
  1911.       IF AB THEN _
  1912.          GOTO 16350
  1913. 16340 DELAY! = FNTI! + 15
  1914. '
  1915. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC "DOORS"
  1916. '
  1917.       CLS
  1918.       PRINT "                ******Warning******"
  1919.       PRINT "IBM's DOS absolutely REQUIRES any software package running"
  1920.       PRINT "as a 'door' (i.e. via a communication port) to monitor the"
  1921.       PRINT "communication port!  Unless the software that you invoke via
  1922.       PRINT "the RBBS-PC 'door' mechanism monitors the communication line,"
  1923.       PRINT "your system will be vulnerable to being hung -- and worse!!!"
  1924.       PRINT "If you don't THROUGHLY understand the section in RBBS-PC's"
  1925.       PRINT "documentation which discusses the pitfalls of opening RBBS-PC's"
  1926.       PRINT "'doors' to your users, DON'T use 'doors'!!!!!"
  1927. 16345 GOSUB 60440
  1928.       CLS
  1929.       PRINT "                ******Warning******"
  1930.       PRINT "Some environments require that you set the modem to answer"
  1931.       PRINT "on zero rings (i.e. 'auto-answer').  This is perilous to"
  1932.       PRINT "using doors because if a user in a door gets disconnected"
  1933.       PRINT "the modem is set to answer on the very next ring and someone who"
  1934.       PRINT "you may not want in the door or in DOS will find themselves"
  1935.       PRINT "able to do you grevious harm.  If you have this type of environ-"
  1936.       PRINT "ment and insist on using 'doors' or dropping to DOS remotely,"
  1937.       PRINT "you may now choose to shoot yourself in the foot (or any other"
  1938.       PRINT "part of the anatomy that is appropriate for such foolhardiness)."
  1939.       CALL GETNUMYN ("Do you want to shoot yourself in the foot",SHOOT.YOURSELF)
  1940.       RETURN
  1941. 16350 CLS
  1942. 16360 LOCATE 23,1
  1943.       PRINT "Current Multi-Link terminal type for DOORS is ";DOORS.TERMINAL.TYPE
  1944. 16370 CALL MMINTEGER ("Enter Multi-Link terminal type for DOORS ",0,12,DOORS.TERMINAL.TYPE)
  1945.       RETURN
  1946. 16650 CALL ANYINTEGER ("MAX # of minutes per day (0 = no limit)",MAX.PER.DAY)
  1947.       RETURN
  1948. 16690 CALL GETNUMYN ("Remind users of # uploads and downloads?",REMIND.FILE.TRANSFERS)
  1949.       RETURN
  1950. 16722 CALL GETNUMYN ("Remind users of their terminal's profile?",REMIND.PROFILE)
  1951.       RETURN
  1952. 16725 CALL GETNUMYN ("Are you using a non-Hayes auto-answer only modem?",DUMB.MODEM)
  1953.       RETURN
  1954. 16730 CALL MMINTEGER ("Default user page length?(a value between 0 and 255)",0,255,PAGE.LENGTH)
  1955.       RETURN
  1956. 16790 CALL MMINTEGER ("Maximum number of lines allowed per message (1-99)",1,99,MAX.MESSAGE.LINES)
  1957.       RETURN
  1958. 16795 CALL MMINTEGER ("Max. # of lines allowed in extended upload description (0-99)",0,99,MAX.EXTENDED.LINES)
  1959.       RETURN
  1960. 17160 CALL ANYINTEGER ("Security level for parameter " + _
  1961.                         HJ$ + _
  1962.                        " is? ",MINIMUM.LOGON.SECURITY)
  1963.       RETURN
  1964. 17170 CALL ANYINTEGER ("Security level for parameter " + _
  1965.                         HJ$ + _
  1966.                        " is? ",DEFAULT.SECURITY.LEVEL)
  1967.       RETURN
  1968. 17180 CALL ANYINTEGER ("Security level for parameter " + _
  1969.                         HJ$ + _
  1970.                        " is? ",SYSOP.SECURITY.LEVEL )
  1971.       RETURN
  1972. '
  1973. ' * FILE CONTAINING FILE NAMES WITH DOWNLOAD SECURITY
  1974. '
  1975. 17190 GOSUB 17340
  1976.       FILESEC.FILE$ = HJ$
  1977.       RETURN
  1978. 17200 CALL ANYINTEGER ("Security level for parameter " + _
  1979.                         HJ$ + _
  1980.                        " is? ",SYSOP.MENU.SECURITY.LEVEL)
  1981.       RETURN
  1982. 17210 CALL ANYINTEGER ("MIN security required to add extended upload description",ASK.EXTENDED.DESC)
  1983.       RETURN
  1984. 17215 CALL ANYINTEGER ("Registration door applies to new users & whose security <=",MAX.REG.SEC)
  1985.       RETURN
  1986. 17220 CALL MMINTEGER("MAXIMUM # security violations allowed (0=no limit)",0,99,MAXIMUM.VIOLATIONS)
  1987.       RETURN
  1988. 17230 CALL SECURE ("SYSOP",SYSOP.COMMANDS.DEFAULTS$,NUM.SYSOP,SYSOP.FUNCTION$(),SYSOP.FUNCTION(),SYSOP.COMMANDS$)
  1989.       RETURN
  1990. 17240 CALL SECURE ("Main Menu",MAIN.COMMANDS.DEFAULTS$,NUM.MAIN,MAIN.FUNCTION$(),MAIN.FUNCTION(),MAIN.COMMANDS$)
  1991.       RETURN
  1992. 17250 CALL SECURE ("File Menu",FILE.COMMANDS.DEFAULTS$,NUM.FILES,FILES.FUNCTION$(),FILES.FUNCTION(),FILE.COMMANDS$)
  1993.       RETURN
  1994. 17260 CALL SECURE ("Utilities",UTIL.COMMANDS.DEFAULTS$,NUM.UTILITY,UTILITY.FUNCTION$(),UTILITY.FUNCTION(),UTIL.COMMANDS$)
  1995.       RETURN
  1996. 17264 CALL SECURE ("Global",GLOBAL.COMMANDS.DEFAULTS$,NUM.GLOBAL,GLOBAL.FUNCTION$(),GLOBAL.FUNCTION(),GLOBAL.COMMANDS$)
  1997.       RETURN
  1998. '
  1999. ' * FILE NAME CONTAINING SPECIAL TEMPORARY PASSWORDS WITH TEMPORARY PRIVILEGES
  2000. '
  2001. 17270 GOSUB 17340
  2002.       PASSWORD.FILE$ = HJ$
  2003.       RETURN
  2004. 17280 CALL ASKRO("Name of file shown for security breaches",24,HJ$)
  2005.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") > 0 THEN _
  2006.          GOTO 17280
  2007.       IF LEN(HJ$) < 1 THEN _
  2008.          SECVIO.HLP$ = NONE.PICKED$ : _
  2009.          RETURN
  2010.       CALL ALLCAPS (HJ$)
  2011.       SECVIO.HLP$ = HELP.PATH$ + HJ$ + "." + HELP.EXTENSION$
  2012.       RETURN
  2013. 17290 CALL MMINTEGER ("Maximum number of password changes is? (0 or more) ",0,99,MAXIMUM.PASSWORD.CHANGES)
  2014.       RETURN
  2015. 17300 CALL ANYINTEGER ("Security level for parameter " + _
  2016.                         HJ$ + _
  2017.                        " is? ",MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  2018.       RETURN
  2019. 17310 CALL ANYINTEGER ("Security level for overwriting files on upload is? ",OVERWRITE.SECURITY.LEVEL)
  2020.       RETURN
  2021. 17316 CALL ANYINTEGER ("Security level for parameter " + _
  2022.                         HJ$ + _
  2023.                        " is? ",SEC.LVL.EXEMPT.FRM.PURGING)
  2024.       RETURN
  2025. '
  2026. ' *  STANDARD ROUTINE TO SIMPLY SPECIFY A DRIVE LETTER FOR ANY OPTION
  2027. '
  2028. 17340 GOSUB 15200
  2029.       GOSUB 14970
  2030.       IF IPAGE = 6 AND ILOOKUP = 9 AND HJ$ = "NONE" THEN _
  2031.       IF MID$(HJ$,2,1) <> ":" THEN _
  2032.          BEEP : _
  2033.          GOTO 17340
  2034.       IF HJ$ = "NONE" THEN _
  2035.          RETURN
  2036.       HJ$ = TB$ + HJ$
  2037.       RETURN
  2038. 17500 CALL GETNUMYN ("Show section in command prompt",SHOW.SECTION)
  2039.       RETURN
  2040. 17550 CALL GETNUMYN ("Show commands in command prompt",COMMANDS.IN.PROMPT)
  2041.       RETURN
  2042. 17560 CALL GETNUMYN ("Let new users set their preferences",NEWUSER.SETS.DEFAULTS)
  2043.       RETURN
  2044. 17570 CALL GETNUMYN ("Add new users to USERS file",REMEMBER.NEW.USERS)
  2045.       RETURN
  2046. 17580 CALL GETNUMYN ("Log on new users even when USERS file full",SURVIVE.NOUSER.ROOM)
  2047.       RETURN
  2048. 17590 CALL GETNUMYN ("Limit file searches to FMS directory",LIMIT.SEARCH.TO.FMS)
  2049.       RETURN
  2050. 17600 CALL GETNUMYN ("Enable download of new files at logon",NEW.FILES.CHECK)
  2051.       RETURN
  2052. 17610 CALL GETNUMYN ("Turn printer off after each recycle",TURN.PRINTER.OFF)
  2053.       RETURN
  2054. 17620 CALL GETNUMYN ("Play music themes for RBBS functions",MUSIC)
  2055.       RETURN
  2056. 17625 CALL GETNUMYN ("Use order on directory of directories (no=sort)",USE.DIR.ORDER)
  2057.       RETURN
  2058. 17630 CALL GETNUMYN ("RESTRICT callers using SUBSCRIPTION period",RESTRICT.BY.DATE)
  2059.       RETURN
  2060. 17635 CALL ANYINTEGER ("Security that lets caller READ & KILL all messages",SEC.KILL.ANY)
  2061.       RETURN
  2062. 17640 CALL ANYINTEGER ("Adopt change in main security for all users with sec <",AUTO.UPGRADE.SEC)
  2063.       RETURN
  2064. 17645 CALL GETNUMYN ("Send multi-file ASCII download as one big file",PERSONAL.CONCAT)
  2065.       RETURN
  2066. 17650 CALL GETNUMYN ("Force check every time whether can AUTODOWNLOAD",ASK.IDENTITY)
  2067.       RETURN
  2068. 17700 CALL GETNUMYN ("Require all callers to answer a questionnaire",AB)
  2069.       IF NOT AB THEN _
  2070.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2071.          RETURN
  2072.       GOSUB 17340
  2073.       GOSUB 17740
  2074.       REQUIRED.QUESTIONNAIRE$ = HJ$
  2075.       RETURN
  2076. 17710 GOSUB 17340
  2077.       PRELOG$ = HJ$
  2078.       RETURN
  2079. 17720 CALL GETNUMYN ("Require all NEW users to answer a questionnaire",AB)
  2080.       IF NOT AB THEN _
  2081.          NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2082.          RETURN
  2083.       GOSUB 17340
  2084.       GOSUB 17740
  2085.       NEW.USER.QUESTIONNAIRE$ = HJ$
  2086.       RETURN
  2087. 17725 GOSUB 17340
  2088.       GOSUB 17740
  2089.       AUTOPAGE.DEF$ = HJ$
  2090.       RETURN
  2091. 17730 GOSUB 17340
  2092.       GOSUB 17740
  2093.       EPILOG$ = HJ$
  2094.       RETURN
  2095. 17740 IF INSTR(HJ$,".") = 0 THEN _
  2096.          HJ$ = HJ$ + ".DEF"
  2097.       RETURN
  2098. 17800 CALL MMINTEGER ("Match personal downloads starting at what column in user record",1,128,PERSONAL.BEGIN)
  2099.       RETURN
  2100. 17805 OK = TRUE
  2101.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2102.          RETURN
  2103.       IF START.WRITE > 100 THEN _
  2104.          RETURN
  2105.       IF START.WRITE < 82 AND _
  2106.          START.WRITE + LEN.WRITE < 82 THEN _
  2107.          RETURN
  2108.       OK = FALSE
  2109. 17806 CALL ASKRO ("Parameter 47 precludes using this part of USERS record. [ENTER] continues",24,A$)
  2110.       RETURN
  2111. 17810 CALL MMINTEGER ("Match personal downloads using how many chars in user record",1,128,PERSONAL.LEN)
  2112.       RETURN
  2113. 17820 CALL ASKRO ("Protocol for personal downloads [ENTER] for none)",24,PERSONAL.PROTOCOL$)
  2114.       IF LEN(PERSONAL.PROTOCOL$) > 1 THEN _
  2115.          GOTO 17820
  2116.       IF PERSONAL.PROTOCOL$ = "" THEN _
  2117.          PERSONAL.PROTOCOL$ = "N"
  2118.       CALL ALLCAPS (PERSONAL.PROTOCOL$)
  2119.       RETURN
  2120. 17830 CALL ASKRO ("Prompt for first field caller asked (What is your..)",24,FIRST.NAME.PROMPT$)
  2121.       RETURN
  2122. 17840 CALL ASKRO ("Prompt for second field caller asked (What is your..)",24,LAST.NAME.PROMPT$)
  2123.       RETURN
  2124. 17845 CALL ASKRO ("Ask callers for [e.g. CITY/STATE] (What is your...)",24,USER.LOCATION$)
  2125.       RETURN
  2126. 17850 CALL GETNUMYN ("Enforce upload/download ratios",ENFORCE.UPLOAD.DOWNLOAD.RATIOS)
  2127.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2128.          RETURN
  2129.       IF START.INDIV > 100 THEN _
  2130.          RETURN
  2131.       IF START.INDIV < 82 AND _
  2132.          START.INDIV + LEN.INDIV < 82 THEN _
  2133.          RETURN
  2134.       ENFORCE.UPLOAD.DOWNLOAD.RATIOS = FALSE
  2135.       GOTO 17806
  2136. 18000 CALL ASKUPOS ("Specify field in USERS file that will identify callers",_
  2137.                     START.HASH,LEN.HASH,PROMPT.HASH$)
  2138. 18002 IF START.HASH < 1 OR LEN.HASH < 1 THEN _
  2139.         BEEP : _
  2140.         GOTO 18000
  2141.       IF START.HASH = 1 THEN _
  2142.          HASH.ID$ = "(NAME)"_
  2143.       ELSE HASH.ID$ = "(nonstandard)"
  2144.       START.WRITE = START.HASH
  2145.       LEN.WRITE = LEN.HASH
  2146.       GOSUB 17805
  2147.       IF NOT OK THEN _
  2148.          START.HASH = 1 : _
  2149.          LEN.HASH = 31 : _
  2150.          GOTO 18002
  2151.       RETURN
  2152. 18100 CALL ASKUPOS ("Use what field to distinguish callers with same ID?",_
  2153.                     START.INDIV,LEN.INDIV,PROMPT.INDIV$)
  2154. 18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
  2155.         INDIV.ID$ = NONE.PICKED$ _
  2156.       ELSE INDIV.ID$ = "(nonstandard)"
  2157.       START.WRITE = START.INDIV
  2158.       START.LEN = LEN.INDIV
  2159.       GOSUB 17805
  2160.       IF NOT OK THEN _
  2161.          START.INDIV = 0 : _
  2162.          LEN.INDIV = 31 : _
  2163.          GOTO 18102
  2164.       START.WRITE = START.INDIV
  2165.       RETURN
  2166. 18200 CALL ASKRO ("New default category code",24,DEFAULT.CATEGORY.CODE$)
  2167.       CALL ALLCAPS (DEFAULT.CATEGORY.CODE$)
  2168.       IF LEN(DEFAULT.CATEGORY.CODE$) > 3 THEN _
  2169.          DEFAULT.CATEGORY.CODE$ = LEFT$(DEFAULT.CATEGORY.CODE$,3) _
  2170.       ELSE DEFAULT.CATEGORY.CODE$ = DEFAULT.CATEGORY.CODE$ + _
  2171.                                     SPACE$(3 - LEN(DEFAULT.CATEGORY.CODE$))
  2172.       RETURN
  2173. 18300 GOSUB 15200
  2174.       CALL ASKRO ("New file of directory categories",24,DIR.CATEGORY.FILE$)
  2175.       DIR.CATEGORY.FILE$ = TB$ + _
  2176.                            DIR.CATEGORY.FILE$
  2177.       RETURN
  2178. 18310 GOSUB 17340
  2179.       MAIN.PUI$ = HJ$
  2180.       CALL BRKFNAME (MAIN.PUI$,X1$,X2$,X3$,TRUE)
  2181.       IF X3$ = "" THEN _
  2182.          MAIN.PUI$ = X1$ + X2$ + ".PUI"
  2183.       RETURN
  2184. 18330 CALL GETNUMYN ("Should DOORS be TIME-LOCKED",TIME.LOCK)
  2185.       CALL GETNUMYN ("Should DOWNLOADS be TIME-LOCKED",Q)
  2186.       TIME.LOCK = -TIME.LOCK + 2 * -Q
  2187.       RETURN
  2188. 18340 CALL ANYINTEGER ("MINIMUM security for turbo logon",ALLOW.CALLER.TURBO)
  2189.       RETURN
  2190. 18345 CALL ANYINTEGER ("MINIMUM security to add dir entry for pre-existing file",ADD.DIR.SECURITY)
  2191.       RETURN
  2192. 18350 CALL ASKRO ("Copy upload description to upload dir AND to (Drv/path/name)",24,ALWAYS.STREW.TO$)
  2193.       CALL ALLCAPS (ALWAYS.STREW.TO$)
  2194.       RETURN
  2195. 18360 CALL ASKRO ("Restrict 'ALL' to directory named ([ENTER] = unrestriced)",24,MASTER.DIRECTORY.NAME$)
  2196.       CALL ALLCAPS (MASTER.DIRECTORY.NAME$)
  2197.       RETURN
  2198. 18400 CALL MMINTEGER ("New max length of upload description (40-46)",40,46,MAX.DESC.LEN)
  2199.       RETURN
  2200. 18500 CALL ANYINTEGER ("Min security to view new uploads",MIN.SEC.TO.VIEW)
  2201.       RETURN
  2202. 18510 CALL ANYINTEGER ("SECURITY level callers gets when SUBSCRIPTION period EXPIRES",EXPIRED.SECURITY)
  2203.       RETURN
  2204. 18515 CALL ANYINTEGER ("Min security for uploader to assign a category",SL.CATEGORIZE.UPLOADS)
  2205.       RETURN
  2206. 18520 CALL MMINTEGER ("Default # days in SUBSCRIPTION PERIOD",0,32000,DAYS.IN.SUBSCRIPTION.PERIOD)
  2207.       RETURN
  2208. 18530 CALL MMINTEGER ("# days left in subscription before start WARNING",0,32000,DAYS.TO.WARN)
  2209.       RETURN
  2210. 18540 CALL MMINTEGER ("# seconds to WAIT for DTR to drop",0,30,DTR.DROP.DELAY)
  2211.       RETURN
  2212. 18545 IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  2213.          XX$ = "Parameter " + _
  2214.             OPTION$ + _
  2215.             " only valid during CONFERENCE maintenence!" : _
  2216.          GOSUB 50345 : _
  2217.          DELAY! = FNTI! + 5 : _
  2218.          GOSUB 60440 : _
  2219.          RETURN
  2220.       CALL ANYINTEGER ("Minimum security level to 'AUTO ADD' to conference",AUTO.ADD.SECURITY)
  2221.       AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  2222.       RETURN
  2223. '
  2224. ' *  GET UPLOAD DIRECTORY DRIVE/PATH
  2225. '
  2226. 18550 GOSUB 15200
  2227.       UPLOAD.PATH$ = HJ$
  2228.       RETURN
  2229. 18600 GOSUB 15200
  2230.       DIRECTORY.PATH$ = HJ$
  2231.       RETURN
  2232. 18620 GOSUB 17340
  2233.       PROTO.DEF$ = HJ$
  2234.       RETURN
  2235. 18625 GOSUB 17340
  2236.       DOORS.DEF$ = HJ$
  2237.       RETURN
  2238. 18630 GOSUB 15200
  2239.       IF INSTR(PERSONAL.DIR$, PERSONAL.DRVPATH$) = 1 THEN _
  2240.          PERSONAL.DIR$ = HJ$ + MID$(PERSONAL.DIR$, LEN(PERSONAL.DRVPATH$)+1)
  2241.       PERSONAL.DRVPATH$ = HJ$
  2242.       RETURN
  2243. 18640 CALL GETNUMYN ("Is there an external DOOR to check Callers",AB)
  2244.       IF NOT AB THEN _
  2245.          REGISTRATION.PROGRAM$ = NONE.PICKED$ : _
  2246.          RETURN
  2247.       GOSUB 17340
  2248.       REGISTRATION.PROGRAM$ = HJ$
  2249.       RETURN
  2250. 18700 CALL GETNUMYN ("Set most critical parameters",AB)
  2251.       IF NOT AB THEN _
  2252.          RETURN
  2253.       HJ$ = CHR$(13)
  2254. '
  2255. ' * SET THE MOST CRITICAL PARAMETERS
  2256. ' *  12 = name of board
  2257. ' *  29 = type pc
  2258. ' * 162 = environment
  2259. ' * 161 = max # nodes
  2260. ' * 123 = min sec logon
  2261. ' * 124 = default security
  2262. ' *   8 = max sess time
  2263. ' *   9 = max day time
  2264. ' * 221 = comm port
  2265. ' * 224 = ring to answer
  2266. ' * 228 = baud rate
  2267. ' * 121 = remote sysop name
  2268. '
  2269.      KSTACKED$ =   "8" + HJ$ +   "9" + HJ$ + _
  2270.                   "12" + HJ$ +  "29" + HJ$ + _
  2271.                  "121" + HJ$ + "123" + HJ$
  2272.      KSTACKED$ = KSTACKED$ + _
  2273.                  "124" + HJ$ + "161" + HJ$ + _
  2274.                  "162" + HJ$ + "221" + HJ$ + _
  2275.                  "224" + HJ$ + "228" + HJ$
  2276.      IX = 1
  2277.      RETURN
  2278. 18800 CALL GETNUMYN ("Set the Parameters new in " + CONFIG.VERSION$,AB)
  2279.       IF NOT AB THEN _
  2280.          RETURN
  2281.       HJ$ = CHR$(13)
  2282. '
  2283. ' * SET THE PARAMETERS NEW TO THIS RELEASE OF RBBS-PC
  2284. ' *  60 = Speech synthesizer
  2285. ' * 108 = Who subject to logon door
  2286. ' * 109 = Doors control file
  2287. ' * 156 = Auto alter security in conference
  2288. ' * 157 = Sec to read/kill all messages
  2289. ' * 158 = Screen msg lines
  2290. ' * 168 = Default extension compressed files
  2291. '
  2292.       KSTACKED$ =    "60" + HJ$ + "108" + HJ$ + "109" + HJ$ + "156" + HJ$ + _
  2293.                     "157" + HJ$ + "158" + HJ$
  2294.       KSTACKED$ = KSTACKED$ + _
  2295.                     "168" + HJ$ + "END"
  2296.       IPAGE = 1
  2297.       RETURN
  2298. '
  2299. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE
  2300. '
  2301. 19189 IF CONFERENCE.MODE = 2 THEN _
  2302.          GOSUB 22560 : _
  2303.          RETURN
  2304.       GOSUB 22100
  2305.       RETURN
  2306. '
  2307. ' * ALLOW THE USER TO SPECIFY THE MAXIMUM NUMBER OF RBBS-PC'S TO CONFIGURE FOR
  2308. '
  2309. 20000 LOCATE 18,1
  2310.       PRINT "NOTE:  PC-SIG believes that it is illegal to charge users for"
  2311.       PRINT "       downloading from the PC-SIG Library on a per download"
  2312.       PRINT "       basis.  Subscription fees of a reasonable nature are"
  2313.       PRINT "       acceptable."
  2314.       A$ = "Specify Library disk in the range A->" + M$ + "(or NONE) "
  2315.       MAX = 4
  2316.       GOSUB 13599
  2317.       LIBRARY.DRIVE$ = HJ$
  2318.       IF LEN(HJ$) > 1 AND HJ$ <> "NONE" THEN _
  2319.          GOTO 20000
  2320.       IF LIBRARY.DRIVE$ = "NONE" THEN _
  2321.          LIBRARY.DRIVE$ = "" _
  2322.       ELSE LIBRARY.DRIVE$ = LIBRARY.DRIVE$ + ":"
  2323.       RETURN
  2324. '
  2325. ' * LIBRARY DIRECTORY/PATH
  2326. '
  2327. 20010 GOSUB 15200
  2328.       LIBRARY.DIRECTORY.PATH$ = HJ$
  2329.       RETURN
  2330. ' *  PKX35 Directory/Path
  2331. '
  2332. 20018 A$ = "Name of Drive and SubDir For PKXARC "
  2333.       GOSUB 15200
  2334.       PKDRV = LEN(HJ$)-1
  2335.       HJ$ = LEFT$(HJ$,PKDRV)
  2336.       ARKVIEW.PATH$ = HJ$
  2337.       RETURN
  2338. '
  2339. ' *  NAME OF 'LIBRARY DIRECTORY' FILE'S EXTENSION
  2340. '
  2341. 20020 A$ = "Name of Library directory extension "
  2342.       GOSUB 13593
  2343.       LIBRARY.DIRECTORY.EXTENTION$ = HJ$
  2344.       RETURN
  2345. '
  2346. ' * LIBRARY WORKING DISK
  2347. '
  2348. 20030 GOSUB 15200
  2349.       LIBRARY.WORK.DISK.PATH$ = HJ$
  2350.       RETURN
  2351. 20040 CALL MMINTEGER ("Max number of disks on Library (1-9999)",1,9999,LIBRARY.MAX.DISK)
  2352.       RETURN
  2353. 20050 CALL MMINTEGER ("Max number of directories on Library (1-999)",1,999,LIBRARY.MAX.DIRECTORY)
  2354.       RETURN
  2355. 20060 CALL MMINTEGER ("Number of subdirectories for each master (1-999)",1,999,LIBRARY.MAX.SUBDIR)
  2356.       RETURN
  2357. '
  2358. ' * PREFIX OF LIBRARY SUBDIRECTORY
  2359. '
  2360. 20070 A$ = "Prefix name of Library subdirectories in each master "
  2361.       MAX = 4
  2362.       GOSUB 13599
  2363.       LIBRARY.SUBDIR.PREFIX$ = HJ$
  2364.       RETURN
  2365. '
  2366. ' *  NAME OF FILE SUBSECTION'S MENU
  2367. '
  2368. 20080 GOSUB 17340
  2369.       MENU$(6) = HJ$
  2370.       RETURN
  2371. '
  2372. ' *  ASSIGN SECURITY LEVELS TO THE LIBRARY MENU'S COMMANDS
  2373. '
  2374. 20090 CALL SECURE ("LIBRARY",LIBRARY.COMMANDS.DEFAULTS$,NUM.LIBRARY,LIBRARY.FUNCTION$(),LIBRARY.FUNCTION(),LIBRARY.COMMANDS$)
  2375.       RETURN
  2376. '
  2377. ' * DRIVE/PATH FOR ARCHIVE UTILITY
  2378. '
  2379. 20100 GOSUB 15200
  2380.       LIBRARY.ARCHIVE.PATH$ = HJ$
  2381.       RETURN
  2382. '
  2383. ' * PROCESS NAME OF ARCHIVE UTILITY
  2384. '
  2385. 20110 CALL ASKRO ("Name of Archive utility ",24,HJ$)
  2386.       CALL ALLCAPS (HJ$)
  2387.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2388.          GOTO 20110
  2389.       LIBRARY.ARCHIVE.PROGRAM$ = HJ$
  2390.       CALL ASKRO ("Archive command ",24,HJ$)
  2391.       CALL ALLCAPS (HJ$)
  2392.       IF LEN(HJ$) > 8 THEN _
  2393.          GOTO 20110
  2394.       LIBRARY.ARCHIVE.PROGRAM$ = LIBRARY.ARCHIVE.PROGRAM$ + _
  2395.                                  " " + _
  2396.                                  HJ$
  2397.       RETURN
  2398. 21750 CALL MMINTEGER ("Maximum number of concurrent RBBS-PC's? (1 - 36)",1,36,B1)
  2399.       IF MAXIMUM.NUMBER.OF.NODES = B1 THEN _
  2400.          RETURN
  2401.       B3! = MAX.MSG.FILE.SIZE.FRM.DEF!
  2402.       GOSUB 30610
  2403.       RETURN
  2404. 21760 CALL MMINTEGER ("Size of internal BUFFER for text files (32-4096)",32,4096,BUFFER.SIZE)
  2405.       RETURN
  2406. 21770 CALL MMINTEGER ("Size of internal BUFFER for Uploads (128-8192)",128,8192,WRITE.BUF.DEF)
  2407.       RETURN
  2408. 21780 CALL MMINTEGER ("Max # of work variables in questionnaire/macros (13-99)",13,99,MAX.WORK.VAR)
  2409.       RETURN
  2410. '
  2411. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN
  2412. '
  2413. 21810 SUBROUTINE.PARAMETER = 1
  2414. 21820 CALL NETTYPE
  2415.       RETURN
  2416. 21895 SUBROUTINE.PARAMETER = 2
  2417.       GOTO 21820
  2418. '
  2419. ' * IDENTIFY THE VOICE SYNTHESIZER TYPES THAT RBBS-PC CAN SUPPORT
  2420. '
  2421. 21900 SUBROUTINE.PARAMETER = 1
  2422. 21903 CALL VOICETYPE
  2423.       RETURN
  2424. 21905 SUBROUTINE.PARAMETER = 2
  2425.       GOTO 21903
  2426. '
  2427. ' * ALLOW THE SYSOP TO SELECT NUMBER OF RECORDS IN THE USER FILE
  2428. '
  2429. 21910 IF CONFERENCE.MODE = 2 THEN _
  2430.          GOSUB 22560 : _
  2431.          RETURN
  2432.       GOSUB 22100
  2433.       RETURN
  2434. '
  2435. ' * ALLOW THE SYSOP TO SELECT HOW RBBS-PC IS TO RECYCLE WHEN A USER LOGS OFF
  2436. '
  2437. 21950 CALL ASKRO ("How to recycle when users log off (<S>YSTEM or <I>NTERNAL)? ",24,HJ$)
  2438.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2439.          GOTO 21950
  2440.       CALL ALLCAPS (HJ$)
  2441.       IF LEFT$(HJ$,1) = "S" THEN _
  2442.          HJ$ = "SYSTEM" : _
  2443.          RECYCLE.TO.DOS = 1 : _
  2444.          GOTO 22020
  2445.       IF LEFT$(HJ$,1) = "I" THEN _
  2446.          HJ$ = "INTERNAL" : _
  2447.          RECYCLE.TO.DOS = 0 : _
  2448.          GOTO 22020
  2449.       GOTO 21950
  2450. 22020 RECYCLE.TO.DOS$ = HJ$
  2451.       RETURN
  2452. 22030 IF NETWORK.TYPE = 2 THEN _
  2453.          CALL ASKRO ("OMNI-NET cannot let message file grow.  Press [Enter] to continue",24,HJ$) : _
  2454.          RETURN
  2455.       CALL GETNUMYN ("Message file GROWS rather than FIXED in size",MESSAGES.CAN.GROW)
  2456.       RETURN
  2457. '
  2458. ' * ALLOW THE SYSOP TO SPECIFY THE MAXIMUM NUMBER OF RECORDS IN MESSAGES FILE
  2459. '
  2460. 22040 CALL ANYNUMBER ("Max. records in preformatted " + _
  2461.                        MAIN.MESSAGE.FILE$ + _
  2462.                       " file (>" + _
  2463.                        STR$(5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIMUM.NUMBER.OF.NODES) + "):",B3!)
  2464.       IF B3! <= (5 * MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIUM.NUMBER.OF.NODES) OR _
  2465.          B3! > 9999999! THEN _
  2466.          GOTO 22040
  2467. 22080 B1 = MAXIMUM.NUMBER.OF.NODES
  2468.       GOSUB 30610
  2469.       MAX.MSG.FILE.SIZE.FRM.DEF! = B3!
  2470.       RETURN
  2471. '
  2472. ' * BUILD THE USERS FILE TO SUIT
  2473. '
  2474. 22100 FF = CURRENT.USER.COUNT
  2475.       IF FF > 1 THEN _
  2476.          FF = FF - 1
  2477.       CALL ANYINTEGER (STR$(FF) + _
  2478.                        " of" + _
  2479.                        STR$(HIGHEST.USER.RECORD) + _
  2480.                        " records used. Enter new max # of records for " + _
  2481.                        MAIN.USER.FILE$ + _
  2482.                        ":",B1)
  2483. 22120 IF B1 < 1 OR B1 > 99999! OR _
  2484.          B1 < FF THEN _
  2485.          GOTO 22100
  2486. 22140 B2 = 2
  2487.       WHILE B2 < B1
  2488.         B2 = B2 * 2
  2489.       WEND
  2490.       IF MAX.USR.FILE.SIZE.FRM.DEF = B2 THEN _
  2491.          RETURN
  2492.       CALL GETNUMYN ("Change " + _
  2493.                       MAIN.USER.FILE$ + _
  2494.                      " file to" + _
  2495.                       STR$(B2) + _
  2496.                      " records?",AB)
  2497.       IF NOT AB THEN _
  2498.          GOTO 22100
  2499. 22150 MAX.USR.FILE.SIZE.FRM.DEF = B2
  2500.       D.FLAG = -1
  2501.       GOSUB 24110
  2502.       IB = 1
  2503.       MAX.USR.FILE.SIZE.FRM.DEF = B2
  2504.       HIGHEST.USER.RECORD = B2
  2505.       GOSUB 30450
  2506.       RETURN
  2507. '
  2508. ' * COMMON ROUTINE TO NOTIFY THE USER WHEN READING DATA
  2509. '
  2510. 22340 LOCATE 22,1
  2511.       PRINT SPACE$(15) + _
  2512.             TIME$ + _
  2513.             " " + _
  2514.             SPACE$(64);
  2515.       LOCATE 22,35
  2516.       COLOR 0,7
  2517.       PRINT " Reading Data, Wait a sec !!! ";
  2518.       COLOR FG,BG,BORDER
  2519.       RETURN
  2520. '
  2521. ' * BEFORE EXITING, ASK USER IF HE WANTS TO WRITE OUT THE CHANGES OR QUIT
  2522. '
  2523. 22350 CALL ASKRO ("Are you satisfied with all changes? (Y/N) or <Q>uit ",24,HJ$)
  2524.       GOSUB 22380
  2525.       ON AB GOTO 12190,59000,60360,22350
  2526. 22380 IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2527.          GOTO 22470
  2528.       CALL ALLCAPS (HJ$)
  2529.       IF HJ$ = "NO" THEN _
  2530.          AB = 1 : _
  2531.          RETURN
  2532.       IF HJ$ = "N" THEN _
  2533.          HJ$ = "NO" : _
  2534.          AB = 1 : _
  2535.          RETURN
  2536.       IF HJ$ = "YES"  THEN _
  2537.          AB = 2 : _
  2538.          RETURN
  2539.       IF HJ$ = "Y" THEN _
  2540.          HJ$ = "YES" : _
  2541.          AB = 2 : _
  2542.          RETURN
  2543.       IF HJ$ = "QUIT" THEN _
  2544.          AB = 3 : _
  2545.          RETURN
  2546.       IF HJ$ = "Q" THEN _
  2547.          AB = 3 : _
  2548.          RETURN
  2549. 22470 AB = 4
  2550.       RETURN
  2551. '
  2552. ' * ASK THE USER WHICH RBBS-PC.DEF FILE CONFIG IS TO WORK WITH
  2553. '
  2554. 22480 CALL MMINTEGER ("To which copy of RBBS-PC will these parameters apply (1 to 36)?",1,36,I)
  2555.       HJ$ = MID$(STR$(I),2)
  2556.       NODE.ID$ = MID$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",VAL(HJ$),1)
  2557.       MID$(CONFIG.FILENAME$,5,1) = NODE.ID$
  2558.       RETURN
  2559. 22550 CALL ASKRO ("Parameter " + _
  2560.                    OPTION$ + _
  2561.                   " unavailable with CONFIG " + _
  2562.                    CONFIG.VERSION$ + _
  2563.                   "!  CR to continue",24,A$)
  2564.       RETURN
  2565. 22560 CALL ASKRO ("Parameter " + _
  2566.                    OPTION$ + _
  2567.                   " unavailable maintaining public conference! CR to continue",24,XX$)
  2568.       RETURN
  2569. '
  2570. ' * REBUILD THE USER FILE
  2571. '
  2572. 22570 A$ = "Rebuild the User File"
  2573.       GOSUB 22580
  2574.       IF CONFERENCE.MODE = 2 THEN _
  2575.          GOSUB 22560 : _
  2576.          RETURN
  2577.       CALL GETNUMYN ("Would you like a printed list of deleted users", _
  2578.                      PRINT.DELETED)
  2579.       D.FLAG = 0
  2580.       GOSUB 24110
  2581.       RETURN
  2582. '
  2583. ' * GENERAL CONFIRMATION OF RESPONSES
  2584. '
  2585. 22580 CALL GETNUMYN ("Really "+A$,AB)
  2586.       PRINT
  2587.       IF NOT AB THEN _
  2588.          RETURN 22582
  2589. 22582 RETURN
  2590. '
  2591. ' * PACK THE MESSAGES FILE
  2592. '
  2593. 23160 A$ = "Pack the Message File"
  2594.       GOSUB 22580
  2595.       B1 = MAXIMUM.NUMBER.OF.NODES
  2596.       B3! = HIGHEST.MESSAGE.RECORD
  2597.       PURGE = -1
  2598.       GOSUB 30610
  2599.       RETURN
  2600. '
  2601. ' * POINT TO THE NEXT MESSAGE HEADER IN THE MESSAGE FILE
  2602. '
  2603. 23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,118,6)) - 1
  2604.       RETURN
  2605. '
  2606. ' * REPAIR THE MESSAGES FILE
  2607. '
  2608. 23620 RB = 1
  2609.       A$ = "Repair Message File"
  2610.       GOSUB 22580
  2611. '
  2612. ' * PRINT THE HEADER RECORDS IN THE MESSAGES FILE
  2613. '
  2614. 23630 SK = 0
  2615.       GOSUB 30040              ' <----Print message headers
  2616.       FILNUM = 1
  2617.       GOSUB 30050
  2618.       FIELD 1,128 AS MESSAGE.RECORD$
  2619.       FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2620.          GET 1,I
  2621.          IF VAL(MID$(MESSAGE.RECORD$,117,4)) > 0 AND _
  2622.             SK < VAL(MID$(MESSAGE.RECORD$,2,4)) THEN _
  2623.             SK = VAL(MID$(MESSAGE.RECORD$,2,4)) : _
  2624.             GOSUB 23610 _
  2625.          ELSE GOTO 23725
  2626.          I$ = "K"
  2627.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  2628.             I$ = "A
  2629.          IF LOC(1) > NEXT.MESSAGE.RECORD - 1 THEN _
  2630.             GOTO 23730
  2631.          PRINT LEFT$(MESSAGE.RECORD$,5) + " " + _
  2632.                MID$(MESSAGE.RECORD$,76,25) + " " + _
  2633.                MID$(MESSAGE.RECORD$,101,15) + " " + _
  2634.                I$ + " " + _
  2635.                MID$(MESSAGE.RECORD$,117,4) + " " + _
  2636.                STR$(LOC(1)) + " "  + _
  2637.                STR$(I)
  2638.          SK = VAL(MID$(MESSAGE.RECORD$,2,4))
  2639.          IF RB AND VAL(MID$(MESSAGE.RECORD$,2,4)) = CALLS.TODATE! THEN _
  2640.             GOTO 23730
  2641.          IF RB THEN _
  2642.             GOSUB 50580
  2643. 23725 NEXT
  2644. 23730 GET 1,1
  2645.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8)
  2646.       MID$(MESSAGE.RECORD$,1,8) = STR$(SK)
  2647.       HJ$ = RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  2648.       MID$(MESSAGE.RECORD$,127,2) = HJ$
  2649.       PUT 1,1
  2650.       CLOSE 1
  2651.       DELAY! = FNTI! + 5
  2652.       GOSUB 60440
  2653.       RETURN
  2654. '
  2655. ' * ROUTINE TO INITIALIZE THE HAYES 2400 MODEM'S FIRMWARE
  2656. '
  2657. 23731 LOCATE 25,5
  2658.       COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
  2659.       IF COMPORT% < 0 THEN _
  2660.          PRINT "COM port cannot be set while using COM0" : _
  2661.          DELAY! = FNTI! + 3 : _
  2662.          GOSUB 60440 : _
  2663.          RETURN _
  2664.       ELSE PRINT "Setting Hayes 2400 firmware switches for RBBS-PC on " + COM.PORT$;
  2665.       DELAY! = FNTI! + 3
  2666.       GOSUB 60440
  2667. '
  2668. '
  2669. ' * WHEN INITIALIZING THE HAYES 2400 VOLITILE MEMORY, SET THE FOLLOWING:
  2670. '
  2671. ' *           &C1       = Indicate carrier detect if user is on-line
  2672. ' *           &D3       = Use these settings when DTR drops
  2673. ' *           B1        = Use Bell 212A when 1200 Baud is detected
  2674. ' *           E0        = Do not echo modem commands back to the PC
  2675. ' *           V1        = Issue long form of results codes
  2676. ' *           M0        = Disable the speaker
  2677. '
  2678. '
  2679. 23732 A$ = USER.INITIALIZE.COMMAND$
  2680.       IF VAL(MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3)) = 255 THEN _
  2681.          A$ = A$ + _
  2682.               "Q1"  ' Don't send results to the PC
  2683. 23734 IF NOT FOSSIL THEN _
  2684.          GOTO 23736
  2685.       CALL FOSINIT(COMPORT%,RESULT%)
  2686.       IF RESULT% = -1 THEN _
  2687.          LOCATE 25,1 : _
  2688.          PRINT "ERROR initializing FOSSIL.  FOSSIL deactivated." : _
  2689.          FOSSIL = FALSE : _
  2690.          GOTO 23736
  2691.       COMSPEED% = VAL(MODEM.INIT.BAUD$)
  2692.       PARITY% = 2                                          ' NO PARITY
  2693.       DATABITS% = 3                                        ' 8 DATA BITS
  2694.       STOPBITS% = 0                                        ' 1 STOP BIT
  2695.       CALL FOSSPEED(COMPORT%,COMSPEED%,PARITY%,DATABITS%,STOPBITS%)
  2696.       STATE% = 1
  2697.       CALL FOSDTR(COMPORT%,STATE%)
  2698.       BYTES% = LEN(FIRMWARE.CLEAR.CMND$)
  2699.       CALL FOSWRITE(COMPORT%,BYTES%,FIRMWARE.CLEAR.CMND$)
  2700.       DELAY! = FNTI! + 3
  2701.       GOSUB 60440
  2702.       BYTES% = LEN(USER.FIRMWARE.WRITE.CMND$)
  2703.       CALL FOSWRITE(COMPORT%,BYTES%,USER.FIRMWARE.WRITE.CMND$)
  2704.       DELAY! = FNTI! + 3
  2705.       GOSUB 60440
  2706.       STATE% = 0
  2707.       CALL FOSDTR(COMPORT%,STATE%)
  2708.       GOTO 23739
  2709. 23736 OPEN COM.PORT$ + ":2400,N,8,1,RS,CD,DS" AS #3
  2710.       PRINT #3,USER.FIRMWARE.CLEAR.CMND$ 'Clear and initialize to factory settings
  2711.       DELAY! = FNTI! + 3
  2712.       GOSUB 60440
  2713.       PRINT #3,A$ + USER.FIRMWARE.WRITE.CMND$
  2714.       GOSUB 60440
  2715. 23739 IF FOSSIL THEN _
  2716.          CALL FOSEXIT(COMPORT%) : _
  2717.       ELSE CLOSE #3
  2718.       RETURN
  2719. '
  2720. ' * ROUTINE TO RENUMBER THE MESSAGE FILE
  2721. '
  2722. 23740 A$ = "Renumber the Message File"
  2723.       GOSUB 22580
  2724.       GOSUB 30040
  2725. 23750 B1 = CALLS.TODATE!
  2726.       CALL GETINIT ("Renumber starting with OLD message # (<" + _
  2727.                      STR$(CALLS.TODATE! + 1) + _
  2728.                     ")",24,1,B1,RE,CR)
  2729.       IF CR THEN _
  2730.          RETURN
  2731. 23810 CALL GETINIT ("Renumber starting with NEW message # ",24,1,9999,NE,CR)
  2732.       IF CR THEN _
  2733.          RETURN
  2734.       NE = NE - 1
  2735.       FILNUM = 1
  2736.       GOSUB 30050
  2737.       FIELD 1,128 AS MESSAGE.RECORD$
  2738.       FOR I  =  FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2739.          GET 1,I
  2740.          X = ASC(MID$(MESSAGE.RECORD$,116))
  2741.          IF X = 225 OR X = 226 THEN _
  2742.             GOSUB 24010 : _
  2743.             GOSUB 23610
  2744.       NEXT
  2745.       GET 1,1
  2746.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8) ' Update the checkpoint record with the
  2747.       MID$(MESSAGE.RECORD$,1,8) = STR$(NE)  ' 1- 8  =  number of last message on system
  2748.       PUT 1,1
  2749.       CLOSE 1
  2750.       GOSUB 23905
  2751.       DELAY! = FNTI! + 1
  2752.       GOSUB 60440
  2753.       RETURN
  2754. '
  2755. ' *  RESET LAST MESSAGE READ TO ZERO
  2756. '
  2757. 23900 A$ = "Zero out last message read for all users"
  2758.       GOSUB 22580
  2759. 23905 GOSUB 24020
  2760.       GOSUB 24025
  2761.       A! = HIGHEST.USER.RECORD
  2762.       XX$ = "Resetting Last Msg Read by User to 0.  Processing Record #"
  2763.       GOSUB 50345
  2764.       FOR J = 1 TO A!
  2765.          GET 1,J
  2766.          LOCATE 24,X
  2767.          PRINT J;
  2768.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2769.          LSET COMP.USER$ = HASH.VALUE$
  2770.          IF ASC(HASH.VALUE$) = 0 OR _
  2771.             COMP.USER$ = NEW.USER$ OR _
  2772.             COMP.USER$ = EMPTY.USER$ OR _
  2773.             COMP.USER$ = DELETED.USER$ THEN _
  2774.               GOTO 23955
  2775.          MID$(USER.OPTIONS$,3,2) = MKI$(0)  ' zero out last msg read
  2776.          PUT 1,J
  2777. 23955 NEXT
  2778.       CLOSE 1
  2779.       RETURN
  2780. 24010 LOCATE 24,15
  2781.       PRINT "Msg #" ; MID$(MESSAGE.RECORD$,1,5);
  2782.       IF VAL(MID$(MESSAGE.RECORD$,2,4)) < RE THEN _
  2783.          PRINT " read"; : _
  2784.          RETURN
  2785.       Y$ = MID$(MESSAGE.RECORD$,1,1)
  2786.       MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
  2787.       NE = NE + 1
  2788.       MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
  2789.       MID$(MESSAGE.RECORD$,1,1) = Y$
  2790.       PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
  2791.       PUT 1,I
  2792.       RETURN
  2793. '
  2794. ' * ROUTINE TO PACK THE USERS FILE
  2795. '
  2796. 24020 GOSUB 30060
  2797.       FIELD 1,  31 AS USER.NAME$, _
  2798.                 15 AS PASSWORD$, _
  2799.                  2 AS SECURITY.LEVEL$, _
  2800.                 14 AS USER.OPTIONS$, _
  2801.                 24 AS CITY.STATE$, _
  2802.                 19 AS MACHINE.TYPE$, _
  2803.                 14 AS LAST.DATE.TIME.ON$, _
  2804.                  3 AS LIST.NEW.DATE$, _
  2805.                  2 AS USER.DOWNLOADS$, _
  2806.                  2 AS USER.UPLOADS$, _
  2807.                  2 AS ELASPED.TIME$
  2808.       FIELD 1, 128 AS USER.RECORD$
  2809.       RETURN
  2810. '
  2811. ' *  SHARED ROUTINE TO SET UP USER PROCESSING
  2812. '
  2813. 24025 IF LEN.HASH < 7 THEN _
  2814.          NU = LEN.HASH _
  2815.       ELSE NU = 7
  2816.       NEW.USER$ = LEFT$("NEWUSER",NU)
  2817.       EMPTY.USER$ = SPACE$(NU)
  2818.       DELETED.USER$ = LEFT$("deleted user",NU)
  2819.       COMP.USER$ = EMPTY.USER$
  2820.       RETURN
  2821. 24040 CALL GETNUMYN ("Make Hilight if and only if color graphics selected",X)
  2822.       IF NOT X THEN _
  2823.          RETURN
  2824.       GOTO 24052
  2825. '
  2826. ' *  SET FLAG TO "FALSE" ON ANSWERED REQUIRED QUESTIONNAIRE AS DEFAULT
  2827. '
  2828. 24050 A$ = "Make all callers answer required questionnaire once"
  2829.       GOSUB 22580
  2830. 24052 GOSUB 24020
  2831.       GOSUB 24025
  2832.       A! = HIGHEST.USER.RECORD
  2833.       XX$ = "Processing Record #"
  2834.       GOSUB 50345
  2835.       FOR J = 1 TO A!
  2836.          GET 1,J
  2837.          LOCATE 24,X
  2838.          PRINT J;
  2839.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2840.          LSET COMP.USER$ = HASH.VALUE$
  2841.          IF ASC(HASH.VALUE$) = 0 OR _
  2842.             COMP.USER$ = NEW.USER$ OR _
  2843.             COMP.USER$ = EMPTY.USER$ OR _
  2844.             COMP.USER$ = DELETED.USER$ THEN _
  2845.               GOTO 24055
  2846.          USER.OPTIONS = CVI(MID$(USER.OPTIONS$,9,2))
  2847.          IF ILOOKUP = 12 THEN _
  2848.             K = ((ASC(MID$(USER.OPTIONS$,6,1)) MOD 3) = 2) : _
  2849.             IF K THEN _
  2850.                USER.OPTIONS = USER.OPTIONS OR 1024 _ ' hilite
  2851.             ELSE USER.OPTIONS = USER.OPTIONS AND 1023 _ ' don't hilite
  2852.          ELSE USER.OPTIONS = USER.OPTIONS AND 1791 'Zero out Req Ques flag
  2853.          MID$(USER.OPTIONS$,9,2) = MKI$(USER.OPTIONS)
  2854.          PUT 1,J
  2855. 24055 NEXT
  2856.       CLOSE 1
  2857.       RETURN
  2858. '
  2859. ' COMMON ROUTINE TO EXPAND OR CONTRACT THE USER FILE
  2860. '
  2861. 24110 GOSUB 30040
  2862.       IF NO.OLD.FILE THEN _
  2863.          GOTO 24111
  2864.       GOSUB 24020
  2865.       GOSUB 50350
  2866.       A$ = F$
  2867.       GOSUB 50095
  2868. 24111 IF NETWORK.TYPE = 6 THEN _
  2869.          OPEN A$ FOR RANDOM SHARED AS #2 LEN = 128 _
  2870.       ELSE OPEN "R",2,A$,128
  2871.       FIELD 2,  31 AS USER.NAME.N$, _
  2872.                 15 AS PASSWORD.N$, _
  2873.                  2 AS SECURITY.LEVEL.N$, _
  2874.                 14 AS USER.OPTIONS.N$, _
  2875.                 24 AS CITY.STATE.N$, _
  2876.                 19 AS MACHINE.TYPE.N$, _
  2877.                 14 AS LAST.DATE.TIME.ON.N$, _
  2878.                  3 AS LIST.NEW.DATE.N$, _
  2879.                  2 AS USER.DOWN.LOADS.N$, _
  2880.                  2 AS USER.UPLOADS.N$, _
  2881.                  2 AS ELAPSED.TIME.N$
  2882.       FIELD 2, 128 AS USER.RECORD.N$
  2883.       CURRENT.MONTH = VAL(LEFT$(DATE$,2)) + (VAL(RIGHT$(DATE$,2)) * 12)
  2884.       A! = 0
  2885.       GOSUB 50840
  2886.       CURRENT.USER.COUNT = 1
  2887.       IF NO.OLD.FILE THEN _
  2888.          HIGHEST.USER.RECORD = A! : _
  2889.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  2890.          GOSUB 30450 : _
  2891.          RETURN
  2892.       A! = LOF(1) / 128.0!
  2893.       GOSUB 24025
  2894.       PURGED.COUNT = 0
  2895. 24112 FOR J  =  1 TO A!
  2896.          GET 1
  2897. 24114    HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2898.          LSET COMP.USER$ = HASH.VALUE$
  2899. 24116    MONTH.OF.LAST.LOGON = VAL(LEFT$(LAST.DATE.TIME.ON$,2)) + _
  2900.                                (VAL(MID$(LAST.DATE.TIME.ON$,7,2)) * 12)
  2901.          MONTHS.SINCE.LAST.LOGON = CURRENT.MONTH - MONTH.OF.LAST.LOGON
  2902.          IF COMP.USER$ = NEW.USER$ OR _
  2903.             COMP.USER$ = DELETED.USER$ THEN _
  2904.             A$ = "" : _
  2905.             GOTO 24430
  2906.          X = ASC(HASH.VALUE$)
  2907.          IF X = 0 OR _
  2908.             COMP.USER$ = EMPTY.USER$ THEN _
  2909.             GOTO 24450
  2910.          Y = 1
  2911. 24280    IF X < 32 OR X > 126 THEN _
  2912.             A$ = "Bad name" : _
  2913.             GOTO 24430
  2914.          IF Y < LEN.HASH THEN _
  2915.             Y = Y + 1 : _
  2916.             X = ASC(MID$(HASH.VALUE$,Y,1)) : _
  2917.             GOTO 24280
  2918.          HJ$ = "copied"
  2919.          IF D.FLAG THEN _
  2920.             GOTO 24290
  2921.          SECURITY.LEVEL = CVI(SECURITY.LEVEL$)
  2922.          IF SECURITY.LEVEL => SEC.LVL.EXEMPT.FRM.PURGING THEN _
  2923.             HJ$ = "exempt" : _
  2924.             GOTO 24290                           ' copy users exempt from purges
  2925.          IF SECURITY.LEVEL < MINIMUM.LOGON.SECURITY THEN _
  2926.             HJ$ = "locked" : _
  2927.             GOTO 24290                                 ' copy "locked-out" users
  2928.          IF MONTHS.SINCE.LAST.LOGON > ACT.MNTHS.B4.DELETING THEN _
  2929.             A$ = "(Last on " + LAST.DATE.TIME.ON$ + ") " + _
  2930.                  STR$(MONTHS.SINCE.LAST.LOGON) : _
  2931.             GOTO 24430                                     'Purge inactive users
  2932.          Y = 1
  2933. 24290    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " " ; HJ$ ; "...";
  2934.          GOSUB 50720
  2935.          PRINT STR$(MONTHS.SINCE.LAST.LOGON)
  2936.          GOTO 24450
  2937. 24430    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  2938.          IF PRINT.DELETED THEN _
  2939.             LPRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  2940.          PURGED.COUNT = PURGED.COUNT + 1
  2941. 24450 NEXT
  2942.       CLOSE 1,2
  2943.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  2944.       GOSUB 30450
  2945. 24730 PRINT PURGED.COUNT;" USERS PURGED"
  2946.       CALL GETNUMYN ("Delete the old " + _
  2947.                       MAIN.USER.FILE$ + _
  2948.                      " file?",AB)
  2949.       IF AB THEN _
  2950.          GOTO 24770
  2951. 24750 A$ = MAIN.USER.FILE$
  2952.       GOSUB 50096
  2953.       NAME MAIN.USER.FILE$ AS A$
  2954.       GOTO 24780
  2955. 24770 KILL MAIN.USER.FILE$
  2956. 24780 GOSUB 50350
  2957.       A$ = F$
  2958.       GOSUB 50095
  2959.       NAME A$ AS MAIN.USER.FILE$
  2960.       RETURN
  2961. 24790 CALL GETNUMYN ("Really check FMS directory",AB)
  2962.       IF NOT AB THEN _
  2963.          RETURN
  2964.       CALL CHKFMSDIR (DIRECTORY.PATH$ + FMS.DIRECTORY$ + "." + DIRECTORY.EXTENTION$,MAX.DESC.LEN + 36,DIR.CATEGORY.FILE$)
  2965.       RETURN
  2966. '
  2967. ' * ROUTINE TO RESET ACTIVE PRINTERS FOR ALL NODES
  2968. '
  2969. 24795 FILNUM = 2
  2970.       GOSUB 30050
  2971.       FIELD 2,128 AS RR$
  2972.       FOR J! = 2 TO MAXIMUM.NUMBER.OF.NODES + 1
  2973.          GET 2,J!
  2974.          MID$(RR$,38,2) = " 0"
  2975.          PUT 2,J!
  2976.       NEXT
  2977.       CLOSE 2
  2978.       RETURN
  2979. '
  2980. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS
  2981. '
  2982. 24800 CLS
  2983.       I! = FRE(C$)
  2984.       COLOR 0,7,0
  2985.       LOCATE 1,10
  2986.       PRINT "RBBS-PC CPC17 Default Configuration " + CONFIG.VERSION$;
  2987.       IF CONFERENCE.MODE THEN _
  2988.          GOSUB 24970
  2989.       COLOR FG,BG,BORDER
  2990.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  2991.       RETURN
  2992. '
  2993. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS
  2994. '
  2995. 24970 LOCATE 2,1
  2996.       PRINT SPACE$(10)
  2997.       LOCATE 2,10
  2998.       A$ = "Private"
  2999.       IF CONFERENCE.MODE = 2 THEN _
  3000.          A$ = "Public"
  3001.       COLOR 31,0,0
  3002.       PRINT "(" + A$ + " Conference Maintenance Mode for " + _
  3003.             MID$(MAIN.MESSAGE.FILE$,1,INSTR(MAIN.MESSAGE.FILE$,"M.DEF") - 1) + _
  3004.             ")";
  3005.       RETURN
  3006. '
  3007. ' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES
  3008. '
  3009. 25020 XX$ = "In file " + _
  3010.             MAIN.USER.FILE$ + _
  3011.             " " + _
  3012.             A$ + _
  3013.             " record"
  3014.       GOTO 25035
  3015. 25030 IF PURGE THEN _
  3016.          RETURN
  3017.       XX$ = A$ + _
  3018.             " file " + _
  3019.             MAIN.MESSAGE.FILE$ + _
  3020.             " record"
  3021. 25035 GOSUB 50345
  3022.       RETURN
  3023. '
  3024. ' * ALLOW THE SYSOP TO ENTER/EXIT/CHANGE CONFERENCE MAINTENANCE MODE
  3025. '
  3026. 25040 REFRESH = 0
  3027.       IF CONFERENCE.MODE = 0 THEN _
  3028.          GOTO 25050
  3029.       GOSUB 30100
  3030.       CALL GETNUMYN ("End conference maintenance?",AB)
  3031.       IF NOT AB THEN _
  3032.          GOTO 25050
  3033. 25044 MAIN.MESSAGE.FILE$ = MAINMSG$
  3034.       MAIN.USER.FILE$ = MAINUSR$
  3035.       REFRESH = 1
  3036.       RETURN
  3037. 25050 CALL ASKRO ("Enter the name of the conference (7 characters or less) ",24,HJ$)
  3038.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
  3039.          GOTO 25040
  3040.       CALL ALLCAPS (HJ$)
  3041.       CP$ = HJ$
  3042. 25090 X$ = "this conference's files"
  3043.       GOSUB 15205
  3044.       CP$ = HJ$ + _
  3045.             CP$
  3046.       MAIN.MESSAGE.FILE$ = CP$ + _
  3047.                            "M.DEF
  3048. 25142 CALL GETNUMYN ("Does this conference have a user's file?",AB)
  3049.       IF AB THEN _
  3050.          GOTO 25160
  3051. 25144 CONFERENCE.MODE = 2
  3052.       GOTO 25170
  3053. 25160 CONFERENCE.MODE = 1
  3054.       UG = 0
  3055.       MAIN.USER.FILE$ = CP$ + _
  3056.                         "U.DEF"
  3057. 25170 REFRESH = 2
  3058.       RETURN
  3059. '
  3060. ' * ESTABLISH IF THE SYSOP WANTS TO USE DOS SUB-DIRECTORIES
  3061. '
  3062. 25380 CALL GETNUMYN ("Will you be using DOS sub-directories?",WILL.SUBDIRS.B.USED)
  3063.       IF WILL.SUBDIRS.B.USED THEN _
  3064.          RETURN
  3065.       UPLOAD.TO.SUBDIR = FALES
  3066.       DOWNLOAD.TO.SUBDIR = FALSE
  3067.       RETURN
  3068. 25420 CALL GETNUMYN ("Are uploads to a DOS sub-directory?",UPLOAD.TO.SUBDIR)
  3069.       RETURN
  3070. 25460 CALL GETNUMYN ("Are downloads from DOS sub-directories?",DOWNLOAD.TO.SUBDIR)
  3071.       RETURN
  3072. '
  3073. ' * HANDLE SUB-DIRECTORY INPUTS (LIST, CHANGE, ADD, DELETE) AND PUT IN .DEF
  3074. '
  3075. 25495 IF NOT UPLOAD.TO.SUBDIR THEN _
  3076.          GOTO 25497
  3077.       A$ = "upload"
  3078.       CALL GETNUMYN ("Change upload DOS sub-directory?",AB)
  3079.       IF AB THEN _
  3080.          GOTO 25500
  3081. 25497 IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3082.          RETURN
  3083.       A$ = "download"
  3084.       CALL GETNUMYN ("Modify download DOS sub-directories?",AB)
  3085.       IF AB THEN _
  3086.          GOTO 25505
  3087. 25498 RETURN
  3088. 25500 IF UPLOAD.SUBDIR$ = "" THEN _
  3089.          GOTO 25502
  3090. 25501 LOCATE 23,5
  3091.       PRINT SPC(74)
  3092.       LOCATE 23,5
  3093.       PRINT "Current " + A$ + " DOS sub-directory name is " + UPLOAD.SUBDIR$;
  3094. 25502 GOSUB 25850
  3095.       IF LEN(HJ$) < 1 THEN _
  3096.          GOTO 25505
  3097.       IF DRIVE.FOR.UPLOADS$ = MID$(X$,1,1) THEN _
  3098.          SWAP UPLOAD.SUBDIR$,X$ : _
  3099.          IF X$ = "" THEN _
  3100.             GOTO 25501 _
  3101.          ELSE 25505
  3102.       GOTO 25502
  3103. 25505 IF A$="upload" THEN _
  3104.          GOTO 25497
  3105.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3106.          RETURN
  3107.       LOCATE 23,5
  3108.       PRINT SPC(74)
  3109.       LOCATE 23,5
  3110.       PRINT STR$(DNLD.SUB) + " of 99 download subdirectories designated.";
  3111. 25510 CALL ASKRO ("L>ist, C>hange, A>dd, D>elete " + A$ +" DOS sub-directories? (CR ends) ",24,HJ$)
  3112.       CALL ALLCAPS (HJ$)
  3113.       IF LEN(HJ$) < 1 THEN _
  3114.          GOTO 25498
  3115.       IF LEN(HJ$) <> 1 THEN _
  3116.          GOTO 25505
  3117.       FF = INSTR("LCAD",HJ$)
  3118.       IF FF = 0 THEN _
  3119.          GOTO 25510
  3120.       IF DNLD.SUB = 0 AND FF <> 3 THEN _
  3121.          GOTO 25510
  3122.       ON FF GOSUB 25610,25670,25730,25670
  3123.       GOTO 25505
  3124. 25610 LAST = (DNLD.SUB/16) + 1
  3125.       INCR = 1
  3126.       FOR IX = 1 TO LAST
  3127.          GOSUB 24800
  3128.          LOCATE 4,1
  3129.          PRINT "DOS sub-directories from which downloads are done:";
  3130.          INDEX = 4
  3131.          FOR I = 1 TO 16
  3132.             LOCATE INDEX + I,1
  3133.             PRINT DNLD$(INCR);
  3134.             INCR = INCR + 1
  3135.             IF INCR > DNLD.SUB THEN _
  3136.                GOTO 25668
  3137.          NEXT
  3138. 25636    CALL GETNUMYN ("More",AB)
  3139.          IF NOT AB THEN _
  3140.             GOTO 25668
  3141. 25644 NEXT
  3142. 25668 RETURN
  3143. 25670 GOSUB 25850
  3144.       IF LEN(HJ$) < 1 THEN _
  3145.          RETURN
  3146.       GOSUB 26030
  3147.       A$ = " not found!"
  3148.       IF X$ = "" THEN _
  3149.          GOTO 25682
  3150.       FOR I = 1 TO DNLD.SUB
  3151.          IF X$ = DNLD$(I) THEN _
  3152.             GOTO 25698
  3153.       NEXT
  3154. 25682 CALL ASKRO (X$ + A$ + " (CR to continue)",24,HJ$)
  3155.       A$ = "download"
  3156.       RETURN
  3157. 25698 IF FF = 4 THEN _
  3158.          FOR X = I TO DNLD.SUB : _
  3159.             DNLD$(X) = DNLD$(X + 1) : _
  3160.          NEXT : _
  3161.          A$ = " deleted!" : _
  3162.          DNLD.SUB = DNLD.SUB - 1 : _
  3163.          GOTO 25682
  3164.       IF FF = 2 THEN _
  3165.          A$ = "download" : _
  3166.          NEXT.MESSAGE.RECORD = I : _
  3167.          GOSUB 25850 : _
  3168.          GOSUB 26030 : _
  3169.          SWAP DNLD$(NEXT.MESSAGE.RECORD),X$ : _
  3170.          A$ = " changed!" : _
  3171.          GOTO 25682
  3172. 25730 X$ = ""
  3173.       GOSUB 25850
  3174.       IF LEN(HJ$) < 1 THEN _
  3175.          RETURN
  3176.       FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3177.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = LEFT$(X$,1) THEN _
  3178.             GOTO 25735
  3179.       NEXT
  3180.       GOSUB 60380
  3181.       CALL ASKRO (X$ + " is not a drive eligible for downloading. (CR to continue)",24,HJ$)
  3182.       GOTO 25730
  3183. 25735 IF X$ = "" THEN _
  3184.          GOTO 25498
  3185.       DNLD.SUB = DNLD.SUB + 1
  3186.       DNLD$(DNLD.SUB) = X$
  3187.       RETURN
  3188. '
  3189. ' * HANDLE SUB-DIRECTORY NAMES AND CHECK FOR THEIR VALIDITY
  3190. '
  3191. 25850 CALL ASKRO ("Enter " + A$ + " DOS sub-directory name (CR to end). ",24,HJ$)
  3192.       CALL ALLCAPS (HJ$)
  3193.       IF LEN(HJ$) < 1 THEN _
  3194.          RETURN
  3195.       IF LEN(HJ$) = 2 AND INSTR(HJ$,":") = 2 THEN _
  3196.          X$ = HJ$ : _
  3197.          RETURN
  3198.       IF INSTR(HJ$,":\") <> 2 THEN _
  3199.          GOTO 25850
  3200.       X$ = HJ$
  3201.       FOR I = 4 TO LEN(X$)
  3202.          Y = INSTR(I,X$,"\")
  3203.          IF Y = 0 THEN _
  3204.             L1 = LEN(X$) - I + 1 : _
  3205.             GOTO 25876
  3206.          IF Y <> 0 THEN _
  3207.             L1 = Y - I + 1 : _
  3208.             GOTO 25876
  3209.       NEXT
  3210. 25876 HJ$ = MID$(X$,I,L1)
  3211.       IF LEN(HJ$) > 12 THEN _
  3212.          GOTO 25850
  3213.       L1 = INSTR(HJ$,".")
  3214.       IF L1 = 0 THEN _
  3215.          IF LEN(HJ$) < 9 THEN _
  3216.             GOTO 25920 _
  3217.          ELSE GOTO 25850
  3218.       IF L1 > 9 THEN _
  3219.          GOTO 25850
  3220.       IF L1 < 2 THEN _
  3221.          GOTO 25850
  3222.       IF LEN(HJ$) - L1 > 3 THEN _
  3223.          GOTO 25850
  3224.       I = 0
  3225.       GOSUB 25920
  3226.       IF I = 0 THEN _
  3227.          RETURN
  3228.       GOTO 25850
  3229. 25920 FOR J = 1 TO LEN(HJ$)
  3230.          X = ASC(MID$(HJ$,J,1))
  3231.          IF (X > 63 AND X < 91) THEN _
  3232.             GOTO 26020
  3233.          IF (X > 47 AND X < 58) THEN _
  3234.             GOTO 26020
  3235.          IF (X = 33) THEN _
  3236.             GOTO 26020
  3237.          IF (X > 34 AND X < 42) THEN _
  3238.             GOTO 26020
  3239.          IF (X > 43 AND X < 47) THEN _
  3240.             GOTO 26020
  3241.          IF (X > 96 AND X < 124) THEN _
  3242.             GOTO 26020
  3243.          IF (X = 125) THEN _
  3244.             GOTO 26020
  3245.          I = 1
  3246.          RETURN
  3247. 26020 NEXT
  3248.       RETURN
  3249. '
  3250. ' * VERIFY THAT THE DISK DRIVE IS ONE ELIGIBLE FOR DOWNLOADING
  3251. '
  3252. 26030 FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3253.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = MID$(X$,1,1) THEN _
  3254.             RETURN
  3255.       NEXT
  3256.       X$ = ""
  3257.       RETURN
  3258. '
  3259. ' * ALLOW THE SYSOP TO SELECT THE TIME OF DAY THAT RBBS-PC IS TO DROP TO DOS
  3260. '
  3261. 26040 CALL GETNUMYN ("Is RBBS-PC to drop to DOS at a specific time each day?",AB)
  3262.       TIME.TO.DROP.TO.DOS = 0
  3263.       IF AB THEN _
  3264.          GOTO 26060
  3265. 26050 GOTO 26065
  3266. 26060 CALL GETINIT ("Time of day (HHMM) to drop to DOS--0000 to 2359? (ENTER = No)",24,0,2359,TIME.TO.DROP.TO.DOS,CR)
  3267. 26065 RETURN
  3268. '
  3269. ' * IDENTIFY THE NET WORK MAIL TYPE THAT RBBS-PC IS RUNNING IN
  3270. '
  3271. 26070 CLS
  3272.       LOCATE 3,5
  3273.       PRINT "RBBS-PC supports the following store-and-forward mail systems:"
  3274.       LOCATE 5,20
  3275.       PRINT "Environment"
  3276.       LOCATE 7,10
  3277.       PRINT "0. None"
  3278.       LOCATE 9,10
  3279.       PRINT "1. SeaDog"
  3280.       LOCATE 11,10
  3281.       PRINT "2. Binkley Term"
  3282.       LOCATE 13,10
  3283.       PRINT "3. X.400 (to be supported in the future)"
  3284.       LOCATE 15,10
  3285.       PRINT "4. GTE's PC-Pursuit (to be supported in the future)"
  3286.       LOCATE 17,10
  3287.       PRINT "5. G.E.'s GENIE's QuikComm (to be supported in the future)"
  3288. 26080 CALL GETINIT ("Select network mail type (0 to 5, CR to end)",24,0,5,AB,CR)
  3289.       NET.MAIL$ = "<none>"
  3290.       IF AB = 1 THEN _
  3291.          NET.MAIL$ = "SeaDog"
  3292.       IF AB = 2 THEN _
  3293.          NET.MAIL$ = "BINKLEY TERM"
  3294.       RETURN
  3295. 26100 CALL GETASCII ("Turn Echo On",HOST.ECHO.ON$)
  3296.       RETURN
  3297. 26105 CALL GETASCII ("Line Acknowledge",DEFAULT.LINE.ACK$)
  3298.       RETURN
  3299. 26110 CALL GETASCII ("Turn Echo Off",HOST.ECHO.OFF$)
  3300.       RETURN
  3301. 26115 CALL GETASCII ("Turn Graphic Emphasis ON",EMPHASIZE.ON.DEF$)
  3302.       RETURN
  3303. 26120 CALL GETASCII ("Turn Graphic Emphasis OFF",EMPHASIZE.OFF.DEF$)
  3304.       RETURN
  3305. '
  3306. ' * CHECK TO SEE IF A FILE EXIST (COMMON SUBROUTINE)
  3307. '
  3308. 30000 CALL FINDFILE (FILE$,OKAY) ' <---- check to see if file exists
  3309. 30030 RETURN
  3310. '
  3311. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
  3312. '
  3313. 30040 FILNUM = 2
  3314.       GOSUB 30050
  3315.       FIELD 2,128 AS RR$
  3316.       GET 2,1
  3317.       CALLS.TODATE! = VAL(MID$(RR$,1,8))             '  1-  8 = number of last message on system
  3318.       AUTO.ADD.SECURITY = CVI(MID$(RR$,9,2))         '  9- 10 = min. security to auto. add a user
  3319.       CURRENT.USER.COUNT = VAL(MID$(RR$,57,5))       ' 57- 61 = next avail. user record
  3320.       FIRST.MESSAGE.RECORD = VAL(MID$(RR$,68,7))     ' 68- 74 = first rec. of msgs file
  3321.       IF FIRST.MESSAGE.RECORD < 3 THEN _
  3322.          FIRST.MESSAGE.RECORD = 3
  3323.       NEXT.MESSAGE.RECORD = VAL(MID$(RR$,75,7))      ' 75- 81 = next avail. msgs record
  3324.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))   ' 82- 88 = last rec. of msgs file
  3325.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))   ' 89- 95 = maximum number of messages
  3326.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2)) '127-128 = maximum number of "nodes"
  3327.       IF MAXIMUM.NUMBER.OF.NODES < 1 THEN _
  3328.          MAXIMUM.NUMBER.OF.NODES = 1
  3329.       CLOSE 2
  3330.       FIRST.USER.RECORD = 1
  3331.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  3332.          AUTO.ADD.SECURITY$ = "CONF. ONLY" _
  3333.       ELSE AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  3334.       RETURN
  3335. ' * OPEN MESSAGE FILE
  3336. 30050 CLOSE FILNUM
  3337.       IF NETWORK.TYPE = 6 THEN _
  3338.          OPEN MAIN.MESSAGE.FILE$ FOR RANDOM SHARED AS #FILNUM LEN = 128 _
  3339.       ELSE OPEN "R",FILNUM,MAIN.MESSAGE.FILE$,128
  3340.       RETURN
  3341. ' * OPEN USER FILE
  3342. 30060 CLOSE 1
  3343.       IF NETWORK.TYPE = 6 THEN _
  3344.          OPEN MAIN.USER.FILE$ FOR RANDOM SHARED AS #1 LEN = 128 _
  3345.       ELSE OPEN "R",1,MAIN.USER.FILE$,128
  3346.       RETURN
  3347. '
  3348. ' * COMMON ROUTINE TO UPDATE AUTO ADD SECURITY TO CONFERENCE FILE
  3349. '
  3350. 30100 FILNUM = 1
  3351.       GOSUB 30050
  3352.       FIELD 1,8 AS MR1$, 2 AS MR2$, 118 AS MR3$
  3353.       GET 1,1
  3354.       LSET MR2$ = MKI$(AUTO.ADD.SECURITY)
  3355.       PUT 1,1
  3356.       CLOSE 1
  3357.       RETURN
  3358. '
  3359. ' * COMMON SUBROUTINE TO UPDATE MESSAGES FILE'S CHECKPOINT RECORD
  3360. '
  3361. 30450 FILNUM = 2
  3362.       GOSUB 30050
  3363.       FIELD 2,128 AS RR$
  3364.       GET 2,1
  3365.       MID$(RR$,9,2)   = MKI$(AUTO.ADD.SECURITY)      '  9- 10 = min. security to auto. add a user
  3366.       MID$(RR$,57,5)  = LEFT$(STR$(CURRENT.USER.COUNT)  +SPACE$(5),5) ' 57- 61 = next avail. user record
  3367.       MID$(RR$,68,7)  = LEFT$(STR$(FIRST.MESSAGE.RECORD)+SPACE$(7),7) ' 68- 74 = first rec. of msgs file
  3368.       MID$(RR$,75,7)  = LEFT$(STR$(NEXT.MESSAGE.RECORD) +SPACE$(7),7) ' 75- 81 = next avail. msgs record
  3369.       MID$(RR$,82,7)  = LEFT$(STR$(HIGHEST.MESSAGE.RECORD)+SPACE$(7),7) ' 82- 88 = last rec. of msgs file
  3370.       MID$(RR$,89,7)  = LEFT$(STR$(MAXIMUM.NUMBER.OF.MSGS)+SPACE$(7),7) ' 89- 95 = maximum number of messages
  3371.       HJ$ = STR$(MAXIMUM.NUMBER.OF.NODES)
  3372.       IF MAXIMUM.NUMBER.OF.NODES>9 THEN _
  3373.          HJ$ = MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2,2)
  3374.       MID$(RR$,127,2) = HJ$                          '127-128 = maximum number of "nodes"
  3375.       PUT 2,1
  3376.       CLOSE 2
  3377.       RETURN
  3378. '
  3379. ' * COMMON ROUTINE TO EXPAND/CONTRACT A MESSAGES FILE
  3380. '
  3381. 30610 A$ = MAIN.MESSAGE.FILE$
  3382.       IF NO.OLD.FILE THEN _
  3383.          GOTO 30612
  3384.       FILNUM = 1
  3385.       GOSUB 30050
  3386.       FIELD 1,128 AS MESSAGE.RECORD$
  3387.       GOSUB 50095
  3388. 30612 CLOSE 2
  3389.       IF NETWORK.TYPE = 6 THEN _
  3390.          OPEN A$ FOR RANDOM SHARED AS #2 LEN = 128 _
  3391.       ELSE OPEN "R",2,A$,128
  3392.       FIELD 2,128 AS RR$
  3393.       A$="Copying"
  3394.       IF NO.OLD.FILE THEN _
  3395.          A$ = "Creating preformatted"
  3396.       OE = B1
  3397.       IF MAXIMUM.NUMBER.OF.NODES <= B1 THEN _
  3398.          OE = MAXIMUM.NUMBER.OF.NODES
  3399.       FOR J=1 TO OE + 1                 ' WRITE CHECKPOINT AND NODE RECORDS
  3400.          IF NO.OLD.FILE AND J = 1 THEN _
  3401.             GOSUB 31040
  3402.          IF NO.OLD.FILE AND J <> 1 THEN _
  3403.             GOSUB 31050
  3404.          IF NO.OLD.FILE = FALSE THEN _
  3405.             GET 1,J : _
  3406.             LSET RR$ = MESSAGE.RECORD$
  3407.          PUT 2
  3408.          GOSUB 25030
  3409.       NEXT
  3410.       IF NO.OLD.FILE THEN _
  3411.          GOTO 30850
  3412.       IF B1 <= MAXIMUM.NUMBER.OF.NODES THEN _
  3413.          GOTO 30780
  3414.       FOR J = OE + 1 TO B1             ' WRITE OUT EXPANISON NODE RECORDS
  3415.          GOSUB 31050
  3416.          PUT 2
  3417.          GOSUB 25030
  3418.       NEXT
  3419. 30780 MAXIMUM.NUMBER.OF.NODES = B1     ' SET VALUE FOR MAXIMUM NUMBER OF NODES
  3420.       JX = FIRST.MESSAGE.RECORD
  3421.       GET 1,JX
  3422.       WHILE VAL(MID$(MESSAGE.RECORD$,2,4)) = 0 AND (JX < NEXT.MESSAGE.RECORD)
  3423.          JX = JX + 1
  3424.          GET 1, JX
  3425.       WEND
  3426.       IF JX > FIRST.MESSAGE.RECORD THEN _
  3427.          PRINT (JX-FIRST.MESSAGE.RECORD);" bad records purged"
  3428.       FOR J = JX TO NEXT.MESSAGE.RECORD - 1
  3429. 30830    GET 1,J
  3430.          IF PURGE <> -1 THEN _
  3431.             GOTO 30840
  3432.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  3433.             IF VAL(MID$(MESSAGE.RECORD$,2,4)) < 1 THEN _
  3434.                PRINT " bad header purged..." : _
  3435.                GOTO 30842 _
  3436.             ELSE PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + " copied..." : _
  3437.                  GOTO 30840
  3438.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(226) THEN _
  3439.             PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + "          purged..." : _
  3440.             J = LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,4)) : _
  3441.             GOTO 30830
  3442. 30840    LSET RR$ = MESSAGE.RECORD$
  3443.          PUT 2                    ' WRITE OUT MESSAGE RECORD
  3444.          GOSUB 25030
  3445. 30842 NEXT
  3446.       B1 = LOC(2) + 1             ' GET NEW FILE'S NEXT MESSAGE RECORD
  3447.       CLOSE 1
  3448.       IF B3! < LOC(2) + 1 THEN _
  3449.          GOTO 30960
  3450. 30850 IF NO.OLD.FILE OR PURGE THEN _
  3451.          NEXT.MESSAGE.RECORD = LOC(2) + 1 : _
  3452.          PURGE = 0 : _
  3453.          A$ = "Preformatting"
  3454.       IF MESSAGES.CAN.GROW THEN _
  3455.          GOTO 30960
  3456.       GOSUB 25030
  3457.       FOR J! = NEXT.MESSAGE.RECORD TO B3!
  3458.          LSET RR$ = SPACE$(128)
  3459.          PUT 2                    ' WRITE OUT EXPANSION MESSAGE RECORDS
  3460.          LOCATE 24,X
  3461.          PRINT STR$(LOC(2)) + SPACE$(10);
  3462.       NEXT
  3463. 30960 FIRST.MESSAGE.RECORD = 1 + MAXIMUM.NUMBER.OF.NODES + 1
  3464.       NEXT.MESSAGE.RECORD = B1
  3465.       IF NEXT.MESSAGE.RECORD < FIRST.MESSAGE.RECORD THEN _
  3466.          NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD
  3467.       HIGHEST.MESSAGE.RECORD = LOC(2)
  3468.       CLOSE 2
  3469. 30980 IF NO.OLD.FILE THEN _
  3470.          RETURN
  3471.       CALL GETNUMYN ("Delete the old " + _
  3472.                       MAIN.MESSAGE.FILE$ + _
  3473.                      " file?",AB)
  3474.       IF AB THEN _
  3475.          GOTO 31020
  3476. 31000 A$ = MAIN.MESSAGE.FILE$
  3477.       GOSUB 50096
  3478.       NAME MAIN.MESSAGE.FILE$ AS A$
  3479.       GOTO 31030
  3480. 31020 KILL MAIN.MESSAGE.FILE$
  3481. 31030 A$ = MAIN.MESSAGE.FILE$
  3482.       GOSUB 50095
  3483.       NAME A$ AS MAIN.MESSAGE.FILE$
  3484.       GOSUB 30450
  3485. 31035 RETURN
  3486. '
  3487. ' * COMMON SUBROUTINE TO CREATE A BLANK "CHECKPOINT" RECORD IN THE MESSAGE FILE
  3488. '
  3489. 31040 LSET RR$ = " 1      " + _               ' NUMBER OF LAST MESSAGE
  3490.                  MKI$(0) + _                  ' SECURITY LEVEL TO AUTO-ADD USER
  3491.                  SPACE$(116) + _              ' BLANKS IN ALL OTHER FIELDS
  3492.                  RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
  3493.       RETURN
  3494. '
  3495. ' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE
  3496. '
  3497. 31050 LSET RR$ = SPACE$(31) + "-1 0 0 0 0 0 0 0    0 0 0I"
  3498.       RETURN
  3499. '
  3500. ' * COMMON SUBROUTINE TO MAKE SURE A WORK FILE HAS ".BAK" AS AN EXTENSION
  3501. '
  3502. 50095 IF INSTR(A$,".") THEN _
  3503.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3504.               ".BAK" : _
  3505.          RETURN _
  3506.       ELSE A$ = A$ + _
  3507.                 ".BAK" : _
  3508.       RETURN
  3509. '
  3510. ' * COMMON SUBROUTINE TO MAKE SURE SAVED FILES HAVES ".OLD" AS AN EXTENSION
  3511. '
  3512. 50096 IF INSTR(A$,".") THEN _
  3513.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3514.               ".OLD" : _
  3515.          RETURN _
  3516.       ELSE A$ = A$ + _
  3517.                 ".OLD" : _
  3518.       RETURN
  3519. '
  3520. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24
  3521. '
  3522. 50345 I! = FRE(C$)
  3523. 50346 LOCATE 24,1
  3524.       PRINT SPACE$(5)+XX$+SPACE$(74-LEN(XX$));
  3525.       X = 5 + LEN(XX$) + 1
  3526.       RETURN
  3527. 50350 F$ = MAIN.USER.FILE$
  3528.       IF INSTR(MAIN.USER.FILE$,".") THEN _
  3529.          F$ = MID$(MAIN.USER.FILE$,1,INSTR(MAIN.USER.FILE$,".") - 1)
  3530.       RETURN
  3531. '
  3532. ' * COMMON SUBROUTINE TO GET LENGTH OF THE USERS FILE
  3533. '
  3534. 50480 MAX.USR.FILE.SIZE.FRM.DEF = 8
  3535.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF
  3536. 50490 NAME MAIN.USER.FILE$ AS MAIN.USER.FILE$
  3537. 50500 GOSUB 30060
  3538.       UG = LOF(1) / 128.0!
  3539.       MAX.USR.FILE.SIZE.FRM.DEF = UG
  3540.       HIGHEST.USER.RECORD = UG
  3541.       GOTO 50560
  3542. '
  3543. ' * COMMON SUBROUTINE TO GET LENGTH OF THE MESSAGES FILE
  3544. '
  3545. 50530 MAX.MSG.FILE.SIZE.FRM.DEF! = (5 * MAX.ALLOWED.MSGS.FRM.DEF) + 1 + MAXIMUM.NUMBER.OF.NODES
  3546. 50540 NAME MAIN.MESSAGE.FILE$ AS MAIN.MESSAGE.FILE$
  3547. 50550 FILNUM = 1
  3548.       GOSUB 30050
  3549.       IF MAX.MSG.FILE.SIZE.FRM.DEF!<LOF(1) / 128 THEN _
  3550.          MAX.MSG.FILE.SIZE.FRM.DEF! = LOF(1) / 128
  3551. 50560 GOSUB 22340
  3552.       CLOSE 1
  3553.       RETURN
  3554. '
  3555. ' * COMMON SUBROUTINE TO REPAIR THE MESSAGE FILE AND GUARANTEE IT'S CHAINS
  3556. '
  3557. 50580 OLD = LOC(1)
  3558.       GET 1,I + 1
  3559.       IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3560.          OR  MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3561.          AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
  3562.          AND  MID$(MESSAGE.RECORD$,64,1) = ":" _
  3563.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3564.          AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3565.          RETURN
  3566.       PRINT "Message chain broken at record number " + STR$(OLD)
  3567.       PRINT "Message chain repair in progress!
  3568.       FOR IQ = OLD + 1 TO NEXT.MESSAGE.RECORD - 1
  3569.          GET 1,IQ
  3570.          IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3571.             OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3572.             AND (MID$(MESSAGE.RECORD$,61,1)  = ":" _
  3573.             AND  MID$(MESSAGE.RECORD$,64,1)  = ":" _
  3574.             AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3575.             AND  MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3576.             GET 1,OLD : _
  3577.             MID$(MESSAGE.RECORD$,117,4) = STR$(IQ - OLD) : _
  3578.             PUT 1,OLD : _
  3579.             PRINT "Message chain repaired." : _
  3580.             I = IQ : _
  3581.             RETURN
  3582.       NEXT
  3583.       RETURN 23730
  3584. '
  3585. ' * COMMON SUBROUTINE TO HASH A USER'S NAME TO FIND THE CORRECT USER RECORD #
  3586. '
  3587. 50720 JX = LEN.HASH
  3588.       WHILE MID$(HASH.VALUE$,JX,1) = " "
  3589.         JX = JX - 1
  3590.       WEND
  3591.       X$ = MID$(HASH.VALUE$,1,JX)
  3592.       UIX# = FNHSH(X$)
  3593.       Q = FNHSH2(X$)
  3594.       NSR = 1
  3595.       RO = CSRLIN
  3596.       CO = POS(0)
  3597. 50722 GET 2,UIX#
  3598.       HASH.VALUE.N$ = MID$(USER.RECORD.N$,START.HASH,LEN.HASH)
  3599.       IF MID$(HASH.VALUE.N$,1,NU) = EMPTY.USER$ THEN _
  3600.          GOTO 50730
  3601.       IF HASH.VALUE$ <> HASH.VALUE.N$ THEN _
  3602.          GOTO 50725
  3603.       IF START.INDIV > 0 AND LEN.INDIV > 0 THEN _
  3604.          IF MID$(USER.RECORD$,START.INDIV,LEN.INDIV) <> MID$(USER.RECORD.N$,START.INDIV,LEN.INDIV) THEN _
  3605.             GOTO 50725
  3606.       LOCATE RO,CO
  3607.       PRINT "Omitted Duplicate ";
  3608.       PURGED.COUNT = PURGED.COUNT + 1
  3609.       RETURN
  3610. 50725 UIX# = UIX# + Q
  3611.       IF UIX# > MAX.USR.FILE.SIZE.FRM.DEF THEN _
  3612.          UIX# = UIX# - MAX.USR.FILE.SIZE.FRM.DEF
  3613.       NSR = NSR + 1
  3614.       LOCATE RO,CO
  3615.       PRINT "searching";UIX#;
  3616.       GOTO 50722
  3617. 50730 LSET USER.RECORD.N$ = USER.RECORD$
  3618.       PUT 2,UIX#
  3619.       CURRENT.USER.COUNT = CURRENT.USER.COUNT + 1
  3620.       LOCATE RO,CO
  3621.       PRINT " pos#";UIX#;"/";NSR;"srch(s) ";
  3622.       RETURN
  3623. '
  3624. ' * COMMON SUBROUTINE TO WRITE OUT BLANK USER RECORDS TO THE USERS FILE
  3625. '
  3626. 50840 TEMPLATE$ = SPACE$(46) + MKI$(-32000)
  3627.       GOSUB 25020
  3628.       FOR J = A! + 1 TO MAX.USR.FILE.SIZE.FRM.DEF
  3629.          LSET USER.RECORD.N$ = TEMPLATE$
  3630.          PUT 2
  3631.          LOCATE 24,X
  3632.          PRINT J;
  3633.       NEXT
  3634.       PRINT
  3635.       RETURN
  3636. '
  3637. ' * CONVERT DISPLAYABLE OPTIONS INTO RBBS-PC.DEF PARAMETER VARIABLES
  3638. '
  3639. 59000 GOSUB 30100
  3640.       IF EXPERT.USER$ = "NOVICE" THEN _
  3641.          EXPERT.USER = 0
  3642.       IF EXPERT.USER$ = "EXPERT" THEN _
  3643.          EXPERT.USER = -1
  3644.       DOWNLOAD.DRIVES$ = DRIVES.FOR.DOWNLOADS$ + DRIVE.FOR.UPLOADS$
  3645.       PROMPT.BELL = -1
  3646.       IF PROMPT.BELL$ = "OFF" THEN _
  3647.          PROMPT.BELL = 0
  3648.       PAGING.PRINTER.SUPPORT$ = ". "
  3649.       IF M11$ = "YES" THEN _
  3650.          PAGING.PRINTER.SUPPORT$ = ". " + _
  3651.                                    CHR$(7)
  3652.       GOSUB 15780
  3653.       IF MAIN.MESSAGE.FILE$ <> MAINMSG$ THEN _
  3654.          MAIN.MESSAGE.FILE$ = MAINMSG$
  3655.       IF MAIN.USER.FILE$ <> MAINUSR$ THEN _
  3656.          MAIN.USER.FILE$ = MAINUSR$
  3657.       IF CONFERENCE.MODE THEN _
  3658.          GOSUB 30040
  3659.       IF CALLERS.FILE$ = NONE.PICKED$ THEN _
  3660.          CALLERS.FILE$ = ""
  3661.       IF ALTDIR.EXTENSION$ = NONE.PICKED$ THEN _
  3662.          ALTDIR.EXTENSION$ = ""
  3663.       IF ALWAYS.STREW.TO$ = NONE.PICKED$ THEN _
  3664.          ALWAYS.STREW.TO$ = ""
  3665.       IF QUES.PATH$ = NONE.PICKED$ THEN _
  3666.          QUES.PATH$ = ""
  3667.       IF NEW.USER.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3668.          NEW.USER.QUESTIONNAIRE$ = ""
  3669.       IF REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3670.          REQUIRED.QUESTIONNAIRE$ = ""
  3671.       IF NET.MAIL$ = NONE.PICKED$ THEN _
  3672.          NET.MAIL$ = "NONE"
  3673.       IF CONFMAIL.LIST$ = NONE.PICKED$ THEN _
  3674.          CONFMAIL.LIST$ = ""
  3675.       IF REGISTRATION.PROGRAM$ = NONE.PICKED$ THEN _
  3676.          REGISTRATION.PROGRAM$ = ""
  3677. 59020 OPEN "O",#1,CONFIG.FILENAME$
  3678.       IF INSTR(MO$,":") < 1 THEN _
  3679.          MO$ = MO$ + _
  3680.                ":"
  3681.       IF INSTR(SJ$,":") < 1 THEN _
  3682.          SJ$ = SJ$ + _
  3683.                ":"
  3684.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  3685.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + _
  3686.                                 ":"
  3687.       T$ = DIRECTORY.EXTENTION$
  3688.       IF INSTR(DIRECTORY.EXTENTION$,".") THEN _
  3689.          T$ = MID$(DIRECTORY.EXTENTION$,INSTR(DIRECTORY.EXTENTION$,".") + 1,LEN(DIRECTORY.EXTENTION$))
  3690.       S$ = UPLOAD.DIRECTORY$
  3691.       IF INSTR(UPLOAD.DIRECTORY$,".") THEN _
  3692.          S$ = MID$(UPLOAD.DIRECTORY$,1,INSTR(UPLOAD.DIRECTORY$,".") - 1)
  3693.       DIRECTORY.EXTENTION$ = T$
  3694.       UPLOAD.DIRECTORY$ = S$
  3695.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3696.          DNLD.SUB = 0 : _
  3697.          FOR I = 1 TO 99 : _
  3698.             DNLD$(I) = "" : _
  3699.          NEXT
  3700.       IF NOT UPLOAD.TO.SUBDIR THEN _
  3701.          UPLOAD.SUBDIR$ = DRIVE.FOR.UPLOADS$ + _
  3702.                           ":"
  3703.       IF UPLOAD.TO.SUBDIR AND UPLOAD.SUBDIR$ <> "" THEN _
  3704.          DRIVE.FOR.UPLOADS$ = UPLOAD.SUBDIR$
  3705.       IF REQUIRED.RINGS = 0 AND _
  3706.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,5) <> "1Q0X1" THEN _
  3707.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,5) = "1Q0X1"
  3708.       IF REQUIRED.RINGS > 0 AND _
  3709.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,3) = "0Q0X1" THEN _
  3710.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,3) = "254  "
  3711. '
  3712. ' * WRITE OUT THE "RBBS-PC.DEF" FILE WITH THE SYSOP'S SPECIFIED CONFIGURATION
  3713. '
  3714. 59030 WRITE #1,VERSION.NUMBER$, _
  3715.                DOWNLOAD.DRIVES$, _
  3716.                SYSOP.PASSWORD.1$, _
  3717.                SYSOP.PASSWORD.2$, _
  3718.                SYSOP.FIRST.NAME$, _
  3719.                SYSOP.LAST.NAME$, _
  3720.                REQUIRED.RINGS, _
  3721.                START.OFFICE.HOURS, _
  3722.                END.OFFICE.HOURS, _
  3723.                MINUTES.PER.SESSION!, _
  3724.                MAX.ALLOWED.MSGS.FRM.DEF, _
  3725.                ACT.MNTHS.B4.DELETING, _
  3726.                UPLOAD.DIRECTORY$,_
  3727.                EXPERT.USER, _
  3728.                ACTIVE.BULLETINS, _
  3729.                PROMPT.BELL, _
  3730.                PCJR, _
  3731.                MENUS.CAN.PAUSE, _
  3732.                MENU$(1), _
  3733.                MENU$(2), _
  3734.                MENU$(3), _
  3735.                MENU$(4), _
  3736.                MENU$(5), _
  3737.                MENU$(6), _
  3738.                CONFERENCE.MENU$, _
  3739.                CONFERENCE.VIEWER.SEC.LVL, _
  3740.                WELCOME.INTERRUPTABLE, _
  3741.                REMIND.FILE.TRANSFERS, _
  3742.                PAGE.LENGTH, _
  3743.                MAX.MESSAGE.LINES, _
  3744.                DOORS.AVAILABLE, _
  3745.                MO$
  3746.       IF INSTR(BULLETIN.MENU$,":") < 1 THEN _
  3747.          BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  3748.                           BULLETIN.MENU$
  3749.       IF INSTR(BULLETIN.PREFIX$,":") < 1 THEN _
  3750.          BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  3751.                             BULLETIN.PREFIX$
  3752.       IF GLOBAL.FUNCTION(3) > MINIMUM.LOGON.SECURITY THEN _
  3753.          GLOBAL.FUNCTION(3) = MINIMUM.LOGON.SECURITY
  3754.       IF FILES.FUNCTION(2) > MINIMUM.LOGON.SECURITY THEN _
  3755.          FILES.FUNCTION(2) = MINIMUM.LOGON.SECURITY
  3756.       IF LIBRARY.FUNCTION(4) > MINIMUM.LOGON.SECURITY THEN _
  3757.          LIBRARY.FUNCTION(4) = MINIMUM.LOGON.SECURITY
  3758.       IF LIBRARY.DRIVE$ = "" THEN _
  3759.          MAIN.FUNCTION(18) = 32767
  3760.       WRITE #1,MAIN.MESSAGE.FILE$, _
  3761.                MAIN.MESSAGE.BACKUP$, _
  3762.                CALLERS.FILE$, _
  3763.                COMMENTS.FILE$, _
  3764.                MAIN.USER.FILE$, _
  3765.                WELCOME.FILE$, _
  3766.                NEWUSER.FILE$, _
  3767.                DIRECTORY.EXTENTION$, _
  3768.                COM.PORT$, _
  3769.                BULLETINS.OPTIONAL, _
  3770.                USER.INIT.COMMAND$, _
  3771.                RTS$, _
  3772.                DOS.VERSION, _
  3773.                FG, _
  3774.                BG, _
  3775.                BORDER, _
  3776.                RBBS.BAT$, _
  3777.                RCTTY.BAT$
  3778.       WRITE #1,OMIT.MAIN.DIRECTORY$, _
  3779.                FIRST.NAME.PROMPT$, _
  3780.                HELP$(3), _
  3781.                HELP$(4), _
  3782.                HELP$(7), _
  3783.                HELP$(9), _
  3784.                BULLETIN.MENU$, _
  3785.                BULLETIN.PREFIX$, _
  3786.                DRIVE.FOR.BULLETINS$, _
  3787.                MESSAGE.REMINDER, _
  3788.                REQUIRE.NON.ASCII, _
  3789.                ASK.EXTENDED.DESC, _
  3790.                MAXIMUM.NUMBER.OF.NODES, _
  3791.                NETWORK.TYPE, _
  3792.                RECYCLE.TO.DOS, _
  3793.                MAX.USR.FILE.SIZE.FRM.DEF, _
  3794.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  3795.                TRASHCAN.FILE$
  3796.       WRITE #1,MINIMUM.LOGON.SECURITY, _
  3797.                DEFAULT.SECURITY.LEVEL, _
  3798.                SYSOP.SECURITY.LEVEL, _
  3799.                FILESEC.FILE$, _
  3800.                SYSOP.MENU.SECURITY.LEVEL, _
  3801.                CONFMAIL.LIST$, _
  3802.                MAXIMUM.VIOLATIONS, _
  3803.                SYSOP.FUNCTION(1), _
  3804.                SYSOP.FUNCTION(2), _
  3805.                SYSOP.FUNCTION(3), _
  3806.                SYSOP.FUNCTION(4), _
  3807.                SYSOP.FUNCTION(5), _
  3808.                SYSOP.FUNCTION(6), _
  3809.                SYSOP.FUNCTION(7), _
  3810.                PASSWORD.FILE$, _
  3811.                MAXIMUM.PASSWORD.CHANGES, _
  3812.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  3813.                OVERWRITE.SECURITY.LEVEL, _
  3814.                DOORS.TERMINAL.TYPE, _
  3815.                MAX.PER.DAY
  3816.       WRITE #1,MAIN.FUNCTION(1), _
  3817.                MAIN.FUNCTION(2), _
  3818.                MAIN.FUNCTION(3), _
  3819.                MAIN.FUNCTION(4), _
  3820.                MAIN.FUNCTION(5), _
  3821.                MAIN.FUNCTION(6), _
  3822.                MAIN.FUNCTION(7), _
  3823.                MAIN.FUNCTION(8), _
  3824.                MAIN.FUNCTION(9), _
  3825.                MAIN.FUNCTION(10), _
  3826.                MAIN.FUNCTION(11), _
  3827.                MAIN.FUNCTION(12), _
  3828.                MAIN.FUNCTION(13), _
  3829.                MAIN.FUNCTION(14), _
  3830.                MAIN.FUNCTION(15), _
  3831.                MAIN.FUNCTION(16), _
  3832.                MAIN.FUNCTION(17), _
  3833.                MAIN.FUNCTION(18), _
  3834.                MIN.NEWCALLER.BAUD, _
  3835.                WAIT.BEFORE.DISCONNECT
  3836.       WRITE #1,FILES.FUNCTION(1), _
  3837.                FILES.FUNCTION(2), _
  3838.                FILES.FUNCTION(3), _
  3839.                FILES.FUNCTION(4), _
  3840.                FILES.FUNCTION(5), _
  3841.                FILES.FUNCTION(6), _
  3842.                FILES.FUNCTION(7), _
  3843.                FILES.FUNCTION(8), _
  3844.                UTILITY.FUNCTION(1), _
  3845.                UTILITY.FUNCTION(2), _
  3846.                UTILITY.FUNCTION(3), _
  3847.                UTILITY.FUNCTION(4), _
  3848.                UTILITY.FUNCTION(5), _
  3849.                UTILITY.FUNCTION(6), _
  3850.                UTILITY.FUNCTION(7), _
  3851.                UTILITY.FUNCTION(8), _
  3852.                UTILITY.FUNCTION(9), _
  3853.                UTILITY.FUNCTION(10), _
  3854.                UTILITY.FUNCTION(11), _
  3855.                UTILITY.FUNCTION(12), _
  3856.                GLOBAL.FUNCTION(1), _
  3857.                GLOBAL.FUNCTION(2), _
  3858.                GLOBAL.FUNCTION(3), _
  3859.                GLOBAL.FUNCTION(4), _
  3860.                UPLOAD.TIME.FACTOR!, _
  3861.                COMPUTER.TYPE, _
  3862.                REMIND.PROFILE, _
  3863.                RBBS.NAME$, _
  3864.                COMMANDS.BETWEEN.RINGS, _
  3865.                MNP.SUPPORT, _
  3866.                PAGING.PRINTER.SUPPORT$, _
  3867.                MODEM.INIT.BAUD$
  3868. 59035 WRITE #1,TURN.PRINTER.OFF,_
  3869.                DIRECTORY.PATH$,_
  3870.                MIN.SEC.TO.VIEW, _
  3871.                LIMIT.SEARCH.TO.FMS, _
  3872.                DEFAULT.CATEGORY.CODE$, _
  3873.                DIR.CATEGORY.FILE$, _
  3874.                NEW.FILES.CHECK, _
  3875.                MAX.DESC.LEN, _
  3876.                SHOW.SECTION, _
  3877.                COMMANDS.IN.PROMPT, _
  3878.                NEWUSER.SETS.DEFAULTS, _
  3879.                HELP.PATH$, _
  3880.                HELP.EXTENSION$, _
  3881.                MAIN.COMMANDS$, _
  3882.                FILE.COMMANDS$, _
  3883.                UTIL.COMMANDS$, _
  3884.                GLOBAL.COMMANDS$, _
  3885.                SYSOP.COMMANDS$
  3886.       WRITE #1,RECYCLE.WAIT, _
  3887.                LIBRARY.FUNCTION(1), _
  3888.                LIBRARY.FUNCTION(2), _
  3889.                LIBRARY.FUNCTION(3), _
  3890.                LIBRARY.FUNCTION(4), _
  3891.                LIBRARY.FUNCTION(5), _
  3892.                LIBRARY.FUNCTION(6), _
  3893.                LIBRARY.FUNCTION(7), _
  3894.                LIBRARY.DRIVE$, _
  3895.                LIBRARY.DIRECTORY.PATH$, _
  3896.                LIBRARY.DIRECTORY.EXTENTION$, _
  3897.                LIBRARY.WORK.DISK.PATH$, _
  3898.                LIBRARY.MAX.DISK, _
  3899.                LIBRARY.MAX.DIRECTORY, _
  3900.                LIBRARY.MAX.SUBDIR, _
  3901.                LIBRARY.SUBDIR.PREFIX$, _
  3902.                LIBRARY.ARCHIVE.PATH$, _
  3903.                LIBRARY.ARCHIVE.PROGRAM$, _
  3904.                LIBRARY.COMMANDS$
  3905.       WRITE #1,UPLOAD.PATH$, _
  3906.                FMS.DIRECTORY$, _
  3907.                ANS.MENU$, _
  3908.                REQUIRED.QUESTIONNAIRE$, _
  3909.                REMEMBER.NEW.USERS, _
  3910.                SURVIVE.NOUSER.ROOM, _
  3911.                PROMPT.HASH$, _
  3912.                START.HASH, _
  3913.                LEN.HASH, _
  3914.                PROMPT.INDIV$, _
  3915.                START.INDIV, _
  3916.                LEN.INDIV
  3917.       WRITE #1,BYPASS.MSGS, _
  3918.                MUSIC, _
  3919.                RESTRICT.BY.DATE, _
  3920.                DAYS.TO.WARN, _
  3921.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  3922.                VOICE.TYPE, _
  3923.                RESTRICT.VALID.CMDS, _
  3924.                NEW.USER.DEFAULT.MODE, _
  3925.                NEW.USER.LINE.FEEDS, _
  3926.                ARKVIEW.PATH$, _            'ViewArc Mod
  3927.                NEW.USER.BELL, _
  3928.                NEW.USER.CASE, _
  3929.                MESSAGES.CAN.GROW, _
  3930.                WRAP.CALLERS.FILE$, _
  3931.                REDIRECT.IO.METHOD, _
  3932.                AUTO.UPGRADE.SEC, _
  3933.                HALT.ON.ERROR, _
  3934.                NEW.PUBLIC.MSGS.SECURITY, _
  3935.                NEW.PRIVATE.MSGS.SECURITY, _
  3936.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  3937.                SL.CATEGORIZE.UPLOADS, _
  3938.                BAUDOT, _
  3939.                TIME.TO.DROP.TO.DOS, _
  3940.                EXPIRED.SECURITY, _
  3941.                DTR.DROP.DELAY, _
  3942.                ASK.IDENTITY, _
  3943.                MAX.REG.SEC, _
  3944.                BUFFER.SIZE, _
  3945.                MLCOM, _
  3946.                SHOOT.YOURSELF, _
  3947.                DEFAULT.EXTENSION$, _
  3948.                NEW.USER.DEFAULT.PROTOCOL$, _
  3949.                NEW.USER.GRAPHICS$, _
  3950.                NET.MAIL$, _
  3951.                MASTER.DIRECTORY.NAME$, _
  3952.                PROTO.DEF$, _
  3953.                UPCAT.HELP$, _
  3954.                ALWAYS.STREW.TO$, _
  3955.                LAST.NAME.PROMPT$
  3956.       MSB = LSB + 1
  3957.       LINE.CONTROL.REGISTER = LSB + 3
  3958.       MODEM.CONTROL.REGISTER = LSB + 4
  3959.       LINE.STATUS.REGISTER = LSB + 5
  3960.       MODEM.STATUS.REGISTER = LSB + 6
  3961.       WRITE #1,PERSONAL.DRVPATH$, _
  3962.                PERSONAL.DIR$, _
  3963.                PERSONAL.BEGIN, _
  3964.                PERSONAL.LEN, _
  3965.                PERSONAL.PROTOCOL$, _
  3966.                PERSONAL.CONCAT, _
  3967.                PRIVATE.READ.SEC, _
  3968.                PUBLIC.READ.SEC, _
  3969.                SEC.CHANGE.MSG, _
  3970.                KEEP.INIT.BAUD, _
  3971.                MAIN.PUI$, _
  3972.                DEFAULT.ECHOER$, _
  3973.                HOST.ECHO.ON$, _
  3974.                HOST.ECHO.OFF$, _
  3975.                SWITCH.BACK, _
  3976.                DEFAULT.LINE.ACK$, _
  3977.                ALTDIR.EXTENSION$, _
  3978.                DIRECTORY.PREFIX$
  3979.       WRITE #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  3980.                MODEM.INIT.WAIT.TIME, _
  3981.                MODEM.COMMAND.DELAY.TIME, _
  3982.                TURBO.RBBS, _
  3983.                DNLD.SUB, _
  3984.                WILL.SUBDIRS.B.USED, _
  3985.                UPLOAD.TO.SUBDIR, _
  3986.                DOWNLOAD.TO.SUBDIR, _
  3987.                UPLOAD.SUBDIR$, _
  3988.                MIN.OLDCALLER.BAUD, _
  3989.                MAX.WORK.VAR, _
  3990.                DISKFULL.GO.OFFLINE, _
  3991.                EXTENDED.LOGGING, _
  3992.                USER.RESET.COMMAND$, _
  3993.                USER.COUNT.RINGS.COMMAND$, _
  3994.                USER.ANSWER.COMMAND$, _
  3995.                USER.GO.OFFHOOK.COMMAND$, _
  3996.                DISK.FOR.DOS$, _
  3997.                DUMB.MODEM, _
  3998.                COMMENTS.AS.MESSAGES, _
  3999.                LSB, _
  4000.                MSB, _
  4001.                LINE.CONTROL.REGISTER, _
  4002.                MODEM.CONTROL.REGISTER, _
  4003.                LINE.STATUS.REGISTER, _
  4004.                MODEM.STATUS.REGISTER
  4005.       ORIG.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$ + _
  4006.                        FILE.COMMANDS.DEFAULTS$ + _
  4007.                        UTIL.COMMANDS.DEFAULTS$ + _
  4008.                        LIBRARY.COMMANDS.DEFAULTS$ + _
  4009.                        GLOBAL.COMMANDS.DEFAULTS$ + _
  4010.                        SYSOP.COMMANDS.DEFAULTS$
  4011.       WRITE #1,KEEP.TIME.CREDITS, _
  4012.                XON.XOFF, _
  4013.                ALLOW.CALLER.TURBO, _
  4014.                USE.DEVICE.DRIVER$, _
  4015.                PRELOG$, _
  4016.                NEW.USER.QUESTIONNAIRE$, _
  4017.                EPILOG$, _
  4018.                REGISTRATION.PROGRAM$, _
  4019.                QUES.PATH$, _
  4020.                USER.LOCATION$, _
  4021.                USER.INITIALIZE.COMMAND$, _
  4022.                USER.FIRMWARE.CLEAR.CMND$, _
  4023.                USER.FIRMWARE.WRITE.CMND$, _
  4024.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  4025.                SIZE.OF.STACK, _
  4026.                SECURITY.EXEMPT.FROM.EPILOG, _
  4027.                USE.BASIC.WRITES, _
  4028.                DOSANSI, _
  4029.                ESCAPE.INSECURE, _
  4030.                USE.DIR.ORDER, _
  4031.                ADD.DIR.SECURITY, _
  4032.                MAX.EXTENDED.LINES, _
  4033.                ORIG.COMMANDS$
  4034.       IF MACRO.EXTENSION$ <> "" THEN _
  4035.          MACRO.EXTENSION$ = "." + MACRO.EXTENSION$
  4036.       CALL COLORCODE (FG.1.DEF$,FG.1.DEF$,X)
  4037.       CALL COLORCODE (FG.2.DEF$,FG.2.DEF$,X)
  4038.       CALL COLORCODE (FG.3.DEF$,FG.3.DEF$,X)
  4039.       CALL COLORCODE (FG.4.DEF$,FG.4.DEF$,X)
  4040.       WRITE #1,LOGON.MAIL.LEVEL$, _
  4041.                MACRO.DRVPATH$, _
  4042.                MACRO.EXTENSION$, _
  4043.                EMPHASIZE.ON.DEF$, _
  4044.                EMPHASIZE.OFF.DEF$, _
  4045.                FG.1.DEF$, _
  4046.                FG.2.DEF$, _
  4047.                FG.3.DEF$, _
  4048.                FG.4.DEF$, _
  4049.                SECVIO.HLP$, _
  4050.                FOSSIL, _
  4051.                MAX.CARRIER.WAIT, _
  4052.                CALLER.BKGRD, _
  4053.                SMART.TEXT, _
  4054.                TIME.LOCK, _
  4055.                WRITE.BUF.DEF, _
  4056.                SEC.KILL.ANY, _
  4057.                DOORS.DEF$, _
  4058.                SCREEN.OUT.MSG$, _
  4059.                AUTOPAGE.DEF$
  4060.       IF DNLD.SUB <1 OR DNLD.SUB > 99 THEN _
  4061.          GOTO 59080
  4062.       FOR I = 1 TO DNLD.SUB
  4063.          WRITE #1,DNLD$(I)
  4064.       NEXT
  4065. 59080 CLOSE #1
  4066. '
  4067. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
  4068. '
  4069.       CLS
  4070.       LOCATE 12,1,1
  4071.       PRINT "RBBS-PC configuration description file, " + CONFIG.FILENAME$ + ", now on default drive."
  4072.       GOSUB 60380
  4073.       GOTO 60340
  4074. '
  4075. ' *  CONFIG.BAS'S ERROR ROUTINES
  4076. '
  4077. 60010 '* HANDLE ERROR CONDITIONS *
  4078.       IF ERR = 62 AND _
  4079.         (ERL = 11600 OR _
  4080.          ERL = 11620 OR _
  4081.          ERL = 11640 OR _
  4082.          ERL = 11660 OR _
  4083.          ERL = 11680 OR _
  4084.          ERL = 11700 OR _
  4085.          ERL = 11705 OR _
  4086.          ERL = 11706) THEN _
  4087.          PRINT CONFIG.FILENAME$ + _
  4088.                " from a version earlier than " + CONFIG.VERSION$ + " on default drive." : _
  4089.          PRINT "Please delete and rerun CONFIG." : _
  4090.          RESUME 60340
  4091.       IF ERL = 15780 AND ERR = 5 AND _
  4092.          INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _
  4093.          RESUME 16073
  4094.       IF ERL = 31000 AND ERR = 58 THEN _
  4095.          KILL A$ : _
  4096.          RESUME 31000
  4097.       IF ERL = 31030 AND ERR = 58 THEN _
  4098.          KILL A$ : _
  4099.          RESUME 31030
  4100.       IF ERL = 22120 AND ERR = 6 THEN _
  4101.          RESUME 22100
  4102.       IF ERL = 24750 AND ERR = 58 THEN _
  4103.          KILL A$ : _
  4104.          RESUME 24750
  4105.       IF ERL = 31020 THEN _
  4106.          PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;".  Error";STR$(ERR):_
  4107.          RESUME 31035
  4108.       IF ERL = 50490 AND ERR = 58 THEN  _
  4109.          RESUME 50500
  4110.       IF ERL = 50540 AND ERR = 58 THEN  _
  4111.          RESUME 50550
  4112.       IF ERL = 50490 OR ERL = 50540 THEN _
  4113.          RESUME 15230
  4114.       IF ERL = 60471 THEN _
  4115.          IF ERR <> 76 THEN _
  4116.             RESUME 60478 _
  4117.          ELSE RESUME 60474
  4118.       IF ERL = 60480 THEN _
  4119.          PRINT "ERROR -";ERR;" UNABLE TO CREATE SUBDIRECTORY" : _
  4120.          RESUME 60478
  4121.       IF ERR = 61 THEN _
  4122.          PRINT "ERROR - IBM DOS DISKETTE FULL " : _
  4123.          RESUME 60340
  4124.       IF ERR = 67 THEN _
  4125.          PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
  4126.          RESUME 60340
  4127.       IF ERR = 70 THEN _
  4128.          PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
  4129.          RESUME 60340
  4130.       IF ERR = 71 THEN _
  4131.          PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE"  : _
  4132.          RESUME 60340
  4133.       IF ERR = 72 THEN _
  4134.          PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
  4135.          RESUME 60340
  4136.       PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
  4137. 60340 IF CONFERENCE.MODE = 1 THEN _
  4138.          DELAY! = FNTI! + 5
  4139.       GOSUB 60440
  4140. 60360 SYSTEM
  4141. '
  4142. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP
  4143. '
  4144. 60380 FOR I = 1 TO 2
  4145.         BEEP
  4146.       NEXT
  4147.       RETURN
  4148. '
  4149. ' * COMMON ROUTINE TO WAIT A SPECIFIED NUMBER OF SECONDS
  4150. '
  4151. 60440 ' wait routine
  4152. 60450 IF FNTI! < DELAY! THEN _
  4153.          GOTO 60450
  4154.       RETURN
  4155. '
  4156. ' * COMMON ROUTINE TO CHECK DRIVE/PATH FOR FORMAT/EXISTENCE
  4157. '
  4158. 60470 IF LEN(STRNG$) < 1 THEN _
  4159.          GOTO 60476
  4160.       IS.OK = TRUE
  4161. 60471 NAME STRNG$ + "XX" AS STRNG$ + "XX"
  4162. 60474 BEEP
  4163.       CALL ASKRO ("Bad/missing drive/path <"+STRNG$+">  [R]e-enter, I)gnore, C)reate",24,ANS$)
  4164.       CALL ALLCAPS (ANS$)
  4165.       ON INSTR("RIC",ANS$) GOTO 60476,60478,60480
  4166. 60476 IS.OK = FALSE
  4167. 60478 RETURN
  4168. 60480 MKDIR LEFT$(STRNG$,LEN(STRNG$)-1)
  4169.       RETURN
  4170.